
呆鳥云:“看了好久 Pandas 代碼,先簡單了解一下,到底什么是 Pandas 吧,看看它到底能干什么? 如果想了解更多 Pandas,請關(guān)注 pypandas.cn,查看最新版的 Pandas 中文官檔?!?/p>
Pandas 是 Python 的核心數(shù)據(jù)分析支持庫,提供了快速、靈活、明確的數(shù)據(jù)結(jié)構(gòu),旨在簡單、直觀地處理關(guān)系型、標(biāo)記型數(shù)據(jù)。Pandas 的目標(biāo)是成為 Python 數(shù)據(jù)分析實(shí)踐與實(shí)戰(zhàn)的必備高級工具,其長遠(yuǎn)目標(biāo)是成為最強(qiáng)大、最靈活、可以支持任何語言的開源數(shù)據(jù)分析工具。經(jīng)過多年不懈的努力,Pandas 離這個(gè)目標(biāo)已經(jīng)越來越近了。
Pandas 適用于處理以下類型的數(shù)據(jù):
- 與 SQL 或 Excel 表類似的,含異構(gòu)列的表格數(shù)據(jù)。
- 有序和無序(即非固定頻率)的時(shí)間序列數(shù)據(jù)。
- 帶行列標(biāo)簽的矩陣數(shù)據(jù),包括同構(gòu)或異構(gòu)型數(shù)據(jù)。
- 任意其它形式的觀測、統(tǒng)計(jì)數(shù)據(jù)集。 數(shù)據(jù)轉(zhuǎn)入 Pandas 數(shù)據(jù)結(jié)構(gòu)時(shí)不必事先標(biāo)記。
Pandas 的主要數(shù)據(jù)結(jié)構(gòu)是 Series(一維數(shù)據(jù))與 DataFrame(二維數(shù)據(jù)),這兩種數(shù)據(jù)結(jié)構(gòu)足以處理金融、統(tǒng)計(jì)、社會(huì)科學(xué)、工程等領(lǐng)域里的大多數(shù)典型用例。對于 R 用戶,DataFrame 提供了比 R 語言 data.frame 更豐富的功能。Pandas 基于 NumPy 開發(fā),可以與其它第三方科學(xué)計(jì)算支持庫完美集成。
Pandas 就像一把萬能瑞士軍刀,下面僅列出了它的部分優(yōu)勢 :
- 處理浮點(diǎn)與非浮點(diǎn)數(shù)據(jù)里的缺失數(shù)據(jù),表示為
NaN; - 大小可變:插入或刪除 DataFrame 等多維對象的列;
- 自動(dòng)、顯式數(shù)據(jù)對齊:顯式地將對象與一組標(biāo)簽對齊,也可以忽略標(biāo)簽,在 Series、DataFrame 計(jì)算時(shí)自動(dòng)與數(shù)據(jù)對齊;
- 強(qiáng)大、靈活的分組(group by)功能:拆分-應(yīng)用-組合數(shù)據(jù)集,聚合、轉(zhuǎn)換數(shù)據(jù);
- 把 Python 和 NumPy 數(shù)據(jù)結(jié)構(gòu)里不規(guī)則、不同索引的數(shù)據(jù)輕松地轉(zhuǎn)換為 DataFrame 對象;
- 基于智能標(biāo)簽,對大型數(shù)據(jù)集進(jìn)行切片、花式索引、子集分解等操作;
- 直觀地合并(merge)、連接(join)數(shù)據(jù)集;
- 靈活地重塑(reshape)、透視(pivot)數(shù)據(jù)集;
- 軸支持結(jié)構(gòu)化標(biāo)簽:即一個(gè)刻度支持多個(gè)標(biāo)簽;
- 成熟的 IO 工具:用于讀取文本文件(CSV 等支持分隔符的文件)、Excel 文件、數(shù)據(jù)庫等來源的數(shù)據(jù),利用超快的 HDF5 格式保存 / 加載數(shù)據(jù);
- 時(shí)間序列:支持日期范圍生成、頻率轉(zhuǎn)換、移動(dòng)窗口統(tǒng)計(jì)、移動(dòng)窗口線性回歸、日期位移等時(shí)間序列功能。
這些功能主要是為了解決其它編程語言、科研環(huán)境的痛點(diǎn)。數(shù)據(jù)科學(xué)家處理數(shù)據(jù)一般分為以下幾個(gè)階段:數(shù)據(jù)整理與清洗、數(shù)據(jù)分析與建模、數(shù)據(jù)可視化與制表,Pandas 是實(shí)現(xiàn)這些數(shù)據(jù)處理工作的理想工具。
其它說明:
- Pandas 速度很快。Pandas 的很多底層算法都用 Cython 優(yōu)化過。然而,為了保持通用性,必然要犧牲一些性能,如果專注于某一功能,您完全可以開發(fā)出比 pandas 更快的專用工具。
- Pandas 是 statsmodels 的依賴項(xiàng),因此,Pandas 也是 Python 中統(tǒng)計(jì)計(jì)算生態(tài)圈的重要組成部分。
- Pandas 已廣泛應(yīng)用于金融領(lǐng)域。
數(shù)據(jù)結(jié)構(gòu)
| 維數(shù) | 名稱 | 描述 |
|---|---|---|
| 1 | Series | 帶標(biāo)簽的一維同構(gòu)數(shù)組 |
| 2 | DataFrame | 帶標(biāo)簽的,大小可變的,二維異構(gòu)表格 |
為什么有多個(gè)數(shù)據(jù)結(jié)構(gòu)?
Pandas 數(shù)據(jù)結(jié)構(gòu)就像是低維數(shù)據(jù)的容器。比如,DataFrame 是 Series 的容器,而 Series 則是標(biāo)量的容器。使用這種方式,可以在容器中以字典的形式插入或刪除對象。
此外,通用 API 函數(shù)的默認(rèn)操作要顧及時(shí)間序列與截面數(shù)據(jù)集的方向。多維數(shù)組存儲(chǔ)二維或三維數(shù)據(jù)時(shí),編寫函數(shù)要注意數(shù)據(jù)集的方向,這對用戶來說是一種負(fù)擔(dān);如果不考慮 C 或 Fortran 中連續(xù)性對性能的影響,一般情況下,不同的軸在程序里其實(shí)沒有什么區(qū)別。Pandas 里,軸的概念主要是為了給數(shù)據(jù)賦予更直觀的語義,即用“更恰當(dāng)”的方式表示數(shù)據(jù)集的方向。這樣做是為了讓用戶編寫數(shù)據(jù)轉(zhuǎn)換函數(shù)時(shí),少費(fèi)點(diǎn)腦子。
處理 DataFrame 等表格數(shù)據(jù)時(shí),index(行)或 columns(列)比 axis 0 和 axis 1 更直觀。用這種方式迭代 DataFrame 的列,代碼更易讀易懂:
for col in df.columns:
series = df[col]
# do something with series
大小可變與數(shù)據(jù)復(fù)制
Pandas 所有數(shù)據(jù)結(jié)構(gòu)的值都是可變的,但數(shù)據(jù)結(jié)構(gòu)的大小并非都是可變的,比如,Series 的長度不可改變,但 DataFrame 里就可以插入列。
Pandas 里,絕大多數(shù)方法都不改變原始的輸入數(shù)據(jù),而是復(fù)制數(shù)據(jù),生成新的對象。 一般來說,原始輸入數(shù)據(jù)不變更穩(wěn)妥。
獲得支持
發(fā)現(xiàn) Pandas 的問題或有任何建議,請反饋到 Github 問題跟蹤器。日常應(yīng)用問題請?jiān)?Stack Overflow 上咨詢 Pandas 社區(qū)專家。
社區(qū)
Pandas 如今由來自全球的同道中人組成的社區(qū)提供支持,社區(qū)里的每個(gè)人都貢獻(xiàn)了寶貴的時(shí)間和精力,正因如此,才成就了開源 Pandas,在此,我們要感謝所有貢獻(xiàn)者。
若您有意為 Pandas 貢獻(xiàn)自己的力量,請先閱讀貢獻(xiàn)指南。
Pandas 是 NumFOCUS 贊助的項(xiàng)目。有了穩(wěn)定的資金來源,就確保了 Pandas,這一世界級開源項(xiàng)目的成功,為本項(xiàng)目捐款也更有保障。
項(xiàng)目監(jiān)管
自 2008 年以來,Pandas 沿用的監(jiān)管流程已正式編纂為項(xiàng)目監(jiān)管文檔。這些文件闡明了如何決策,如何處理營利組織與非營利實(shí)體進(jìn)行開源協(xié)作開發(fā)的關(guān)系等內(nèi)容。
Wes McKinney 是仁慈的終身獨(dú)裁者。
開發(fā)團(tuán)隊(duì)
核心團(tuán)隊(duì)成員列表及詳細(xì)信息可在 Github 倉庫的人員頁面上查詢。
機(jī)構(gòu)合作伙伴
現(xiàn)有機(jī)構(gòu)合作伙伴信息可在 Pandas 網(wǎng)站頁面上查詢。