(資料科學學習手札73)盤點pandas 1.0.0中的新特性
本文對應指令碼及資料已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
毫無疑問pandas
已經成為基於Python
的資料分析領域最重要的包,而就在最近,pandas
終於迎來了1.0.0版本,對於pandas
來說這是一次更新是里程碑式的,刪除了很多舊版本中臃腫的功能,新增了一些嶄新的特性,更加專注於高效實用的資料分析,本文就將針對pandas 1.0.0
在筆者眼中比較重要的特性進行介紹,對於想要完整徹底瞭解新版本特性的朋友可以直接去看官方文件。
2 pandas 1.0.0中的新特性
由於1.0.0
並不作為正式版釋出,因此要安裝它需要指定版本(請注意,pandas 1.0.0
Python 3.6.1
及以上版本):
pip install --upgrade pandas==1.0.0rc0
成功安裝後,讓我們來體驗一下全新版本的pandas
給我們帶來了哪些令人興奮的功能吧。
2.1 新增StringDtype資料型別
一直以來,pandas
中的字串型別都是用object
來儲存的,這次更新帶來的新的更有針對性的StringDtye
主要是為了解決如下問題:
object
型別對於字串與非字串混合的資料無差別的統一儲存為一個型別,而現在的StringDtype
則只允許儲存字串物件
我們通過下面的例子更好的理解這個新特性,首先我們在excel
中建立如下的表格(圖2),其包含兩列V1
在jupyter lab
中我們首先讀入該資料並檢視其具體資訊:
# 讀入StringDtype_test.xlsx並檢視其具體資訊
StringDtype_test = pd.read_excel('StringDtype test.xlsx')
StringDtype_test.info()
可以看到在資料讀入階段兩列都被當作object
型,接下來我們使用astype
方法分別對兩列強制轉換型別為string
,看看在我們的新版本中會發生什麼(注意,在1.0.0
版本中StringDtype
string
):
# 對V1進行強制型別
StringDtype_test['V1'].astype('string')
可以看到,執行這段程式碼後丟擲了對應的錯誤,因為StringDtype
只允許字串出現,包含數字1的V1便被拒絕轉換為string
型,而對於V2:
# 對V2進行強制型別
StringDtype_test['V2'].astype('string')
則正常完成了資料型別的轉換,而pandas
中豐富的字串方法對新的string
同樣適用,譬如英文字母大寫化:
StringDtype_test['V2'].astype('string').str.upper()
2.2 markdown表格匯出
在新版本的pandas
中新增了一個很有意思的方法to_markdown()
,通過它我們可以將表格匯出為markdown
格式,下面是一個例子:
df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])
# 匯出為markdown表格字串
print(df.to_markdown())
下面的表格就是我直接將圖7中打印出的markdown
格式表格放到編輯器中再修改了表格居中的效果,只要你的編輯器支援markdown
格式,就可以這樣方便地生成表格:
A | B | |
---|---|---|
a | 1 | 1 |
a | 2 | 2 |
b | 3 | 3 |
2.3 新增ignore_index引數
我們在過去版本對DataFrame或Series按列使用sort_values()
、按index使用sort_index()
排序或使用drop_duplicates()
去除資料框中的重複值時,經常會發現處理後的結果index隨著排序或行的刪除而被打亂,在index無意義時我們需要使用reset_index()
方法對結果的index進行重置,而在新版本的pandas
中,為sort_values()
、sort_index()
以及drop_duplicates()
引入了新引數ignore_index(),這是一個bool型變數,預設值為False,當被設定為True時,排序後結果的index會被自動重置:
df = pd.DataFrame({
'V1': [_ for _ in range(5)],
})
# ignore_index設定為False
df.sort_values(by='V1', ignore_index=False, ascending=False)
這時因為ignore_index引數設定為False,排序後的結果index未被重置:
接下來設定ignore_index引數為True:
# ignore_index設定為True
df.sort_values(by='V1', ignore_index=True, ascending=False)
這時返回的結果就已經被重置了index:
sort_index()
和drop_duplicates()
效果同上,不重複展示。
2.4 美化info()輸出
新版本的pandas
對DataFrame.info()
輸出內容進行了美化,增強了使用體驗:
df = pd.DataFrame({"int_col": [1, 2, 3],
"text_col": ["a", "b", "c"],
"float_col": [0.0, 0.1, 0.2]})
df.info()
還有很多更新內容,比如為rolling.apply()
新增了引數engine,以使用numba
後端極大提升numpy
相關運算速度等,這裡就不再贅述,感興趣的讀者可以前往 https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html
以上就是本文的全部內容,如有筆誤望指出