數據分析 | 一文了解數據分析必須掌握的庫-Pandas

  • 2019 年 11 月 27 日
  • 筆記

呆鳥云:「看了好久 Pandas 程式碼,先簡單了解一下,到底什麼是 Pandas 吧,看看它到底能幹什麼?如果想了解更多 Pandas,請關注 pypandas.cn,查看最新版的 Pandas 中文官檔。」

Pandas 是 Python 的核心數據分析支援庫,提供了快速、靈活、明確的數據結構,旨在簡單、直觀地處理關係型、標記型數據。Pandas 的目標是成為 Python 數據分析實踐與實戰的必備高級工具,其長遠目標是成為最強大、最靈活、可以支援任何語言的開源數據分析工具。經過多年不懈的努力,Pandas 離這個目標已經越來越近了。

Pandas 適用於處理以下類型的數據:

  • 與 SQL 或 Excel 表類似的,含異構列的表格數據。
  • 有序和無序(即非固定頻率)的時間序列數據。
  • 帶行列標籤的矩陣數據,包括同構或異構型數據。
  • 任意其它形式的觀測、統計數據集。數據轉入 Pandas 數據結構時不必事先標記。

Pandas 的主要數據結構是 Series(一維數據)與 DataFrame(二維數據),這兩種數據結構足以處理金融、統計、社會科學、工程等領域裡的大多數典型用例。對於 R 用戶,DataFrame 提供了比 R 語言 data.frame 更豐富的功能。Pandas 基於 NumPy 開發,可以與其它第三方科學計算支援庫完美集成。

Pandas 就像一把萬能瑞士軍刀,下面僅列出了它的部分優勢 :

  • 處理浮點與非浮點數據里的缺失數據,表示為 NaN
  • 大小可變:插入或刪除 DataFrame 等多維對象的列;
  • 自動、顯式數據對齊:顯式地將對象與一組標籤對齊,也可以忽略標籤,在 Series、DataFrame 計算時自動與數據對齊;
  • 強大、靈活的分組(group by)功能:拆分-應用-組合數據集,聚合、轉換數據;
  • 把 Python 和 NumPy 數據結構里不規則、不同索引的數據輕鬆地轉換為 DataFrame 對象;
  • 基於智慧標籤,對大型數據集進行切片花式索引子集分解等操作;
  • 直觀地合併(merge)連接(join)數據集;
  • 靈活地重塑(reshape)透視(pivot)數據集;
  • 支援結構化標籤:即一個刻度支援多個標籤;
  • 成熟的 IO 工具:用於讀取文本文件(CSV 等支援分隔符的文件)、Excel 文件、資料庫等來源的數據,利用超快的 HDF5 格式保存 / 載入數據;
  • 時間序列:支援日期範圍生成、頻率轉換、移動窗口統計、移動窗口線性回歸、日期位移等時間序列功能。

這些功能主要是為了解決其它程式語言、科研環境的痛點。數據科學家處理數據一般分為以下幾個階段:數據整理與清洗、數據分析與建模、數據可視化與製表,Pandas 是實現這些數據處理工作的理想工具。

其它說明:

  • Pandas 速度很快。Pandas 的很多底層演算法都用 Cython 優化過。然而,為了保持通用性,必然要犧牲一些性能,如果專註於某一功能,您完全可以開發出比 pandas 更快的專用工具。
  • Pandas 是 statsmodels 的依賴項,因此,Pandas 也是 Python 中統計計算生態圈的重要組成部分。
  • Pandas 已廣泛應用於金融領域。

數據結構

維數

名稱

描述

1

Series

帶標籤的一維同構數組

2

DataFrame

帶標籤的,大小可變的,二維異構表格

為什麼有多個數據結構?

Pandas 數據結構就像是低維數據的容器。比如,DataFrame 是 Series 的容器,而 Series 則是標量的容器。使用這種方式,可以在容器中以字典的形式插入或刪除對象。

此外,通用 API 函數的默認操作要顧及時間序列與截面數據集的方向。多維數組存儲二維或三維數據時,編寫函數要注意數據集的方向,這對用戶來說是一種負擔;如果不考慮 C 或 Fortran 中連續性對性能的影響,一般情況下,不同的軸在程式里其實沒有什麼區別。Pandas 里,軸的概念主要是為了給數據賦予更直觀的語義,即用「更恰當」的方式表示數據集的方向。這樣做是為了讓用戶編寫數據轉換函數時,少費點腦子。

處理 DataFrame 等表格數據時,index(行)或 columns(列)比 axis 0axis 1 更直觀。用這種方式迭代 DataFrame 的列,程式碼更易讀易懂:

for col in df.columns:      series = df[col]      # do something with series

大小可變與數據複製

Pandas 所有數據結構的值都是可變的,但數據結構的大小並非都是可變的,比如,Series 的長度不可改變,但 DataFrame 里就可以插入列。

Pandas 里,絕大多數方法都不改變原始的輸入數據,而是複製數據,生成新的對象。一般來說,原始輸入數據不變更穩妥。

獲得支援

發現 Pandas 的問題或有任何建議,請回饋到 Github 問題跟蹤器。日常應用問題請在 Stack Overflow 上諮詢 Pandas 社區專家。

社區

Pandas 如今由來自全球的同道中人組成的社區提供支援,社區里的每個人都貢獻了寶貴的時間和精力,正因如此,才成就了開源 Pandas,在此,我們要感謝所有貢獻者。

若您有意為 Pandas 貢獻自己的力量,請先閱讀貢獻指南。

Pandas 是 NumFOCUS 贊助的項目。有了穩定的資金來源,就確保了 Pandas,這一世界級開源項目的成功,為本項目捐款也更有保障。

項目監管

自 2008 年以來,Pandas 沿用的監管流程已正式編纂為項目監管文檔。這些文件闡明了如何決策,如何處理營利組織與非營利實體進行開源協作開發的關係等內容。

Wes McKinney 是仁慈的終身獨裁者。