套件概觀#
pandas 是 Python 套件,提供快速、彈性且具表現力的資料結構,旨在讓處理「關聯式」或「標籤式」資料變得既容易又直覺。它的目標是成為在 Python 中進行實際、真實世界資料分析的基本高階建構模組。此外,它還有更廣泛的目標,成為任何語言中功能最強大、最彈性的開源資料分析/處理工具。它已經朝著這個目標邁進一大步。
pandas 非常適合許多不同類型的資料
資料列資料,具有異質型欄位,例如 SQL 表格或 Excel 試算表
已排序和未排序(不一定有固定頻率)的時間序列資料。
任意矩陣資料(同質型或異質型),具有列標籤和欄標籤
任何其他形式的觀察/統計資料集。資料不需要標籤即可放入 pandas 資料結構
pandas 的兩個主要資料結構,Series
(一維)和 DataFrame
(二維),處理了絕大多數在財務、統計、社會科學和許多工程領域中的典型使用案例。對於 R 使用者,DataFrame
提供了 R 的 data.frame
所提供的一切,還有更多。pandas 建立在 NumPy 之上,並旨在與許多其他第三方程式庫在科學運算環境中整合良好。
以下僅列出 pandas 做得好的幾件事
輕鬆處理浮點和非浮點資料中的遺失資料(表示為 NaN)
大小可變性:可以從 DataFrame 和更高維度物件中插入和刪除欄
自動和明確的資料對齊:物件可以明確對齊到一組標籤,或者使用者可以簡單地忽略標籤,讓
Series
、DataFrame
等在運算中自動為您對齊資料強大、靈活的群組依據功能,用於對資料集執行分割-套用-組合運算,用於聚合和轉換資料
讓你可以輕鬆地轉換其他 Python 和 NumPy 資料結構中參差不齊、編製索引方式不同的資料,轉換成 DataFrame 物件
針對大型資料集進行智慧型標籤式切片、花式編製索引和子集化
直覺式的合併和串聯資料集
彈性重新塑形和樞紐化資料集
軸的階層式標籤(每個刻度可能有多個標籤)
用於從平面檔案(CSV 和分隔)、Excel 檔案、資料庫載入資料的強大 IO 工具,以及從超快速的HDF5 格式載入/載入資料
時間序列特定功能:日期範圍產生和頻率轉換、移動視窗統計、日期偏移和滯後。
這些原則中的許多原則都是為了解決使用其他語言/科學研究環境時經常遇到的缺點。對於資料科學家來說,處理資料通常分為多個階段:整理和清理資料、分析/建模,然後將分析結果組織成適合繪製圖表或表格顯示的格式。pandas 是執行所有這些任務的理想工具。
其他一些注意事項
pandas 很快。許多低階演算法位元已在 Cython 程式碼中經過廣泛調整。然而,與其他任何事物一樣,一般化通常會犧牲效能。因此,如果你專注於應用程式的某項功能,你可能能夠建立一個更快的專用工具。
pandas 是 statsmodels 的相依項,使其成為 Python 中統計運算生態系統的重要部分。
pandas 已在金融應用程式中廣泛用於生產。
資料結構#
維度 |
名稱 |
說明 |
---|---|---|
1 |
系列 |
1D 標籤化同質類型陣列 |
2 |
資料框 |
通用 2D 標籤化、大小可變的表格結構,具有潛在異質類型欄位 |
為什麼需要多個資料結構?#
思考 pandas 資料結構的最佳方式是將其視為較低維度資料的彈性容器。例如,資料框是系列的容器,而系列是純量的容器。我們希望能夠以類似字典的方式在這些容器中插入和移除物件。
此外,我們希望常見 API 函數具有合理的預設行為,考量到時間序列和橫斷面資料集的典型方向。在使用 N 維陣列 (ndarrays) 儲存 2 維和 3 維資料時,使用者在撰寫函數時必須考量資料集的方向;軸被視為或多或少等價(除非 C 或 Fortran 連續性對效能很重要)。在 pandas 中,軸旨在為資料賦予更多語義意義;亦即,對於特定資料集,很可能會有「正確」的方向來排列資料。因此,目標是減少在下游函數中編寫資料轉換所需的腦力。
例如,對於表格資料(資料框),從語義上來說,思考索引(列)和欄位會比思考軸 0 和軸 1 更具幫助。因此,在資料框的欄位中反覆運算會產生更具可讀性的程式碼
for col in df.columns:
series = df[col]
# do something with series
資料的可變性和複製#
所有 pandas 資料結構都是值可變的(其包含的值可以變更),但並不總是大小可變的。系列的長度無法變更,但例如,可以將欄位插入資料框中。然而,絕大多數的方法會產生新物件,並讓輸入資料保持不變。一般來說,我們喜歡在合理的情況下偏好不可變性。
取得支援#
對於 pandas 的問題和想法,第一站是 GitHub Issue Tracker。如果您有任何一般性問題,pandas 社群專家會透過 Stack Overflow 來回答。
社群#
pandas 目前由全球一群志同道合的人士積極支援,他們貢獻寶貴的時間和精力,協助讓開放原始碼的 pandas 成為可能。感謝 所有貢獻者。
如果您有興趣貢獻,請造訪 貢獻指南。
pandas 是 NumFOCUS 贊助的專案。這將有助於確保 pandas 作為世界級開放原始碼專案的開發成功,並讓您得以 捐款 給這個專案。
專案治理#
自 2008 年成立以來,pandas 專案非正式使用的治理流程已在 專案治理文件 中正式化。這些文件說明了決策的制定方式,以及我們社群中各個元素的互動方式,包括開放原始碼協作開發與營利或非營利實體可能資助的工作之間的關係。
Wes McKinney 是終身仁慈獨裁者 (BDFL)。
開發團隊#
核心團隊成員清單和更詳細的資訊可以在 pandas 網站 上找到。
機構合作夥伴#
目前機構合作夥伴的資訊可以在 pandas 網站頁面 上找到。
授權#
BSD 3-Clause License
Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
All rights reserved.
Copyright (c) 2011-2023, Open source contributors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.