每日最新頭條.有趣資訊

讀完本文,輕鬆玩轉數據處理利器Pandas 1.0

選自Medium

作者:Tom Waterman

機器之心編譯

參與:李詩萌、魔王

2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 數據科學家 Tom Waterman 撰文概述了其新功能。本文助你輕鬆玩轉 Pandas 1.0。

常用數據科學庫 Pandas 剛剛年滿十二歲,現在已經發布到 1.0.0 版。首個 Pandas 1.0 候選版本顯示出,現在的 Pandas 在遇到缺失值時會接收一個新的標量,遵循語義化版本控制(Semantic Versioning)形成了新的棄用策略,網站也經過了重新設計……

注意:Pandas 1.0.0rc 版本於 2020 年 1 月 9 日發布,之前的版本是 0.25。

最新發布的 Pandas 版本包含許多優秀功能,如更好地自動匯總數據幀、更多輸出格式、新的數據類型,甚至還有新的文檔站點。

完整的版本說明參見:https://dev.pandas.io/docs/whatsnew/v1.0.0.html

本文將用較通俗的方式介紹 Pandas 新版本,希望對大家有所幫助。

要使用新版 Pandas,用戶可以用 pip 輕鬆升級。截至本文撰寫時,Pandas 1.0 仍是候選版本,這意味著安裝時需要明確指定版本號。

pip install --upgrade pandas==1.0.0rc0

當然,升級可能會破壞部分代碼,因為這次發布的是主要版本,所以請務必小心。

這一版 Pandas 也不再支持 Python 2。要使用 1.0+版本的 Pandas,至少需要 Python 3.6+版本,所以請確認 pip 和 python 的版本是正確的。

$ pip --version

pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)$ python --version

Python 3.7.5

你可以根據下列代碼確認一切正常,以及 Pandas 的版本正確。

>>> import pandas as pd

>>> pd.__version__

1.0.0rc0

使用 DataFrame.info 更好地自動匯總數據幀

我最喜歡的新功能是改進後的 DataFrame.info (http://dataframe.info/) 方法。它使用一種可讀性更強的格式,讓數據探索過程變得更加容易。

>>> df = pd.DataFrame({

...: 'A': [1,2,3],

...: 'B': ["goodbye", "cruel", "world"],

...: 'C': [False, True, False]

...:})

>>> df.info()

RangeIndex: 3 entries, 0 to 2

Data columns (total 3 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 A 3 non-null int64

1 B 3 non-null object

2 C 3 non-null object

dtypes: int64(1), object(2)

memory usage: 200.0+ bytes

支持 Markdown 表格作為輸出格式

我第二喜歡的功能是用 DataFrame.to_markdown 方法,把數據幀導出到 Markdown 表格中。

>>> df.to_markdown()

| | A | B | C |

|---:|----:|:--------|:------|

| 0 | 1 | goodbye | False |

| 1 | 2 | cruel | True |

| 2 | 3 | world | False |

這樣可以通過 GitHub Gist,在 Medium 等處更容易地展示數據。

新數據類型:布爾值和字元串

Pandas 1.0 還實驗性地引入了新的數據類型:布爾值和字元串。

由於這些改變是實驗性的,因此數據類型的 API 可能會有輕微的變動,所以用戶在使用時務必謹慎操作。不過,Pandas 推薦用戶合理使用這些數據類型,在未來的版本中也將改善特定類型運算的性能,比如正則表達式匹配(Regex Match)。

默認情況下,Pandas 不會自動將你的數據強製轉換為這些類型。但你可以修改參數來使用新的數據類型。

>>> B = pd.Series(["goodbye", "cruel", "world"], dtype="string")

>>> C = pd.Series([False, True, False], dtype="bool")

>>> df.B = B, df.C = C

>>> df.info()

RangeIndex: 3 entries, 0 to 2

Data columns (total 3 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 A 3 non-null int64

1 B 3 non-null string

2 C 3 non-null bool

dtypes: int64(1), object(1), string(1)

memory usage: 200.0+ bytes

注意現在的 Dtype 列是如何反映新數據類型 string 和 bool 的。

字元串數據類型最大的用處是,你可以從數據幀中隻選擇字元串列,這樣就可以更快地分析數據集中的文本。

df.select_dtypes("string")

在此之前,你只能通過指定名稱來選擇字元串類型列。

更多有關新數據類型的說明,參見:https://dev.pandas.io/docs/user_guide/text.html?highlight=string。

棄用

新版本棄用了許多功能。不過最值得注意的是,從 DataFrameGroupBy 對象中選擇列時,輸入 key 列表或 key 元組的方法已被棄用。現在要用 item 列表,而非鍵列表。

另一個最常用的變動出現在 DataFrame.hist() 和 Series.his() 中。現在 figsize 沒有默認值,要想指定繪圖的大小,需要輸入元組。

Bug 修複

新版本還修複了大量 bug,提高了數據分析的可信度。

此前,在遇到分類數據以外的值時,fillna() 會引發 ValueError。因此,它現在納入 assert 來測試不一致,並處理異常。

另外,在將分類數據轉換為整數時,也會產生錯誤的輸出。特別是對於 NaN 值,其輸出往往是錯誤的。因此,新版 Pandas 修複了這個 bug。

原文鏈接:https://towardsdatascience.com/top-features-of-pandas-1-0-26abff08d1b6

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

加入機器之心(全職記者 / 實習生):[email protected]

投稿或尋求報導:content@jiqizhixin.com

廣告 & 商務合作:[email protected]

獲得更多的PTT最新消息
按讚加入粉絲團