重磅消息:Pandas 2.x 即將來襲

Pandas 2.x

呆鳥說:根據(jù) Pandas 開發(fā)團隊發(fā)布的消息,3月以后,Pandas 就要進入 2.x 時代了,Python 數(shù)據(jù)分析師快來入坑吧!

具體鏈接如下:https://pandas.pydata.org/docs/dev/whatsnew/index.html

Release Note

主要改進

  1. 可配置選項,mode.dtype_backend 返回 pyarrow 數(shù)據(jù)類型
  2. 使用 pip 安裝可選的支持庫
  3. Index 支持 Numpy 的 numeric 數(shù)據(jù)類型
  4. 使用 Copy_on_write(寫入時復制)機制,提高寫入性能
Python大咖談

具體說明如下:

一、加入 pyarrow 數(shù)據(jù)類型

加入對 Apache Arrow 的支持,是 Pandas 2.x 最大的變化。首先介紹一下什么是 Arrow。

Arrow 是 Apache 軟件基金會支持的內(nèi)存分析開發(fā)平臺,它可以快速處理和移動大規(guī)模數(shù)據(jù),為數(shù)據(jù)的扁平化和分層制定了標準化的,與語言無關(guān)的列式內(nèi)存格式,以便在硬件層面上進行更高效的數(shù)據(jù)分析操作。

pyarrow 是為 Python 社區(qū)提供的 Arrow 支持庫,與 NumPy 和 Pandas 的集成度非常高,從 2.0 版開始,Pandas 專門加入了對 pyarrow 數(shù)據(jù)類型的支持。

使用 pyarrow,可以讓 pandas 處理數(shù)據(jù)的數(shù)據(jù)操作更快,內(nèi)存使用效率更高,尤其是在處理超大數(shù)據(jù)集時,其優(yōu)勢更明顯。

以下內(nèi)容是 Pandas 2.0 開發(fā)公告介紹的對 arrow 的支持說明。

Pandas 之前在 read_csv()read_excel()read_json()read_sql()to_numeric() 等函數(shù)中使用 use_nullable_dtypes 關(guān)鍵字參數(shù),讓這些函數(shù)可以自動轉(zhuǎn)換 nullable 數(shù)據(jù)類型,為了簡化操作,Pandas 新增了一個 nullable_dtypes 選項,允許在沒有明確指定時,把關(guān)鍵字參數(shù)在全局范圍內(nèi)設為 True。啟用該選項的方式如下:

pd.options.mode.nullable_dtypes = True

這個選項僅用于函數(shù)的 use_nullable_dtypes 關(guān)鍵字。

Pandas 又新增了一個全局配置項: mode.dtype_backend,用于連接上述 read_csv() 等函數(shù)中的 use_nullable_dtypes=True 參數(shù),以選擇 nullable 數(shù)據(jù)類型。

DataFrame.convert_dtypes()Series.convert_dtypes() 兩種方法也可以使用
mode.dtype_backend 選項。

mode.dtype_backend 的默認值為 pandas,返回的是 Numpy 支持的 nullable 數(shù)據(jù)類型。但現(xiàn)在也可以設置為 pyarrow,返回 pyarrow 支持的 nullable 數(shù)據(jù)類型,即 ArrowDtype

示例代碼如下:

In [13]: import io

In [14]: data = io.StringIO("""a,b,c,d,e,f,g,h,i
   ....:     1,2.5,True,a,,,,,
   ....:     3,4.5,False,b,6,7.5,True,a,
   ....: """)
   ....: 

In [15]: with pd.option_context("mode.dtype_backend", "pandas"):
   ....:     df = pd.read_csv(data, use_nullable_dtypes=True)
   ....: 

In [16]: df.dtypes
Out[16]: 
a             Int64
b           Float64
c           boolean
d    string[python]
e             Int64
f           Float64
g           boolean
h    string[python]
i             Int64
dtype: object

In [17]: data.seek(0)
Out[17]: 0

# 主要看下面這行代碼
In [18]: with pd.option_context("mode.dtype_backend", "pyarrow"):
   ....:     df_pyarrow = pd.read_csv(data, use_nullable_dtypes=True, engine="pyarrow")
   ....: 

In [19]: df_pyarrow.dtypes
Out[19]: 
a     int64[pyarrow]
b    double[pyarrow]
c      bool[pyarrow]
d    string[pyarrow]
e     int64[pyarrow]
f    double[pyarrow]
g      bool[pyarrow]
h    string[pyarrow]
i      null[pyarrow]
dtype: object

二、使用 pip 安裝可選的支持庫

使用 pip 安裝 pandas 時,可以指定要安裝的可選支持庫。

pip install "pandas[performance, aws]>=2.0.0"

三、Index 支持 Numpy 的 numeric 數(shù)據(jù)類型

Pandas 2.0 開始,可以在 Index 中使用 numpy 的數(shù)字型數(shù)據(jù)類型。Pandas 之前只能用 int64uint64float64 等數(shù)據(jù)類型,從 2.0 開始,Pandas 支持所有 numpy 的 numeric 數(shù)據(jù),如 int8int16int32int64uint8uint16uint32uint64float32float64 等。

示例代碼如下:

In [1]: pd.Index([1, 2, 3], dtype=np.int8)
Out[1]: Index([1, 2, 3], dtype='int8')

In [2]: pd.Index([1, 2, 3], dtype=np.uint16)
Out[2]: Index([1, 2, 3], dtype='uint16')

In [3]: pd.Index([1, 2, 3], dtype=np.float32)
Out[3]: Index([1.0, 2.0, 3.0], dtype='float32')

四、提高寫入性能

  • 為以下方法新增了惰性復制機制,推遲復制,直到修改相關(guān)對象時才真正復制。啟用 Copy-on-Write 機制之后,以下方法僅返回視圖,這比常規(guī)的性能有了顯著提升。

(以下僅為部分支持該機制的方法,詳見文檔)
* DataFrame.reset_index() / Series.reset_index()
* DataFrame.set_index()
* DataFrame.reindex() / Series.reindex()
* DataFrame.reindex_like() / Series.reindex_like()
* DataFrame.drop()
* DataFrame.dropna() / Series.dropna()
* DataFrame.select_dtypes()
* DataFrame.align() / Series.align()
* Series.to_frame()
* DataFrame.rename() / Series.rename()
* DataFrame.add_prefix() / Series.add_prefix()
* DataFrame.add_suffix() / Series.add_suffix()
* DataFrame.drop_duplicates() / Series.drop_duplicates()
* DataFrame.filter() / Series.filter()
* DataFrame.head() / Series.head()
* DataFrame.tail() / Series.tail()
* DataFrame.pop() / Series.pop()
* DataFrame.replace() / Series.replace()
* DataFrame.shift() / Series.shift()
* DataFrame.sort_index() / Series.sort_index()
* DataFrame.sort_values() / Series.sort_values()
* DataFrame.truncate()
* DataFrame.iterrows()
* DataFrame.fillna() / Series.fillna()
* DataFrame.where() / Series.where()
* DataFrame.astype() / Series.astype()
* concat()

  • 以 Series 的形式處理 DataFrame 的單個列(例如,df["col"])時,每次構(gòu)建都返回一個新對象,啟用 Copy-on-Write 時,不再多次返回相同的 Series 對象。
  • 使用已有的 Series 構(gòu)建 Series,且默認選項為 copy=False 時,Series 構(gòu)造函數(shù)將使用惰性復制機制,即推遲復制,直到發(fā)生數(shù)據(jù)修改時才真正復制。
  • 使用已有的 DataFrame 構(gòu)建 DataFrame,且默認選項為 copy=False 時,DataFrame 構(gòu)造函數(shù)也使用惰性復制機制。
  • 使用 Series 字典構(gòu)建 DataFrame,且默認選項為 copy=False 時,也使用惰性復制機制。
  • 啟用 Copy-on-Write 時,使用鏈式賦值設置值(例如,df["a"][1:3] = 0)將引發(fā)異常。在此模式下,鏈式賦值不能正常運行。
  • DataFrame.replace()inplace=True 時,使用 Copy-on-Write
  • DataFrame.transpose() 使用 Copy-on-Write 機制。
  • 算術(shù)運算,如, ser *= 2 也支持 Copy-on-Write
    啟用本選項的方式如下:
# 方式一
pd.set_option("mode.copy_on_write", True)

# 方式二
pd.options.mode.copy_on_write = True

# 局部啟用的方式
with pd.option_context("mode.copy_on_write", True):
    ...

推薦書單

《Pandas1.x實例精解》詳細闡述了與Pandas相關(guān)的基本解決方案,主要包括Pandas基礎(chǔ),DataFrame基本操作,創(chuàng)建和保留DataFrame,開始數(shù)據(jù)分析,探索性數(shù)據(jù)分析,選擇數(shù)據(jù)子集,過濾行,對齊索引,分組以進行聚合、過濾和轉(zhuǎn)換,將數(shù)據(jù)重組為規(guī)整形式,組合Pandas對象,時間序列分析,使用Matplotlib、Pandas和Seaborn進行可視化,調(diào)試和測試等內(nèi)容。此外,該書還提供了相應的示例、代碼,以幫助讀者進一步理解相關(guān)方案的實現(xiàn)過程。

Pandas1.x實例精解
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內(nèi)容