Pandas 2.0來(lái)了~
Pandas[1]是一個(gè)用于處理數(shù)據(jù)的Python庫(kù),在Python開(kāi)發(fā)者中非常流行。相信你已經(jīng)對(duì)他非常熟悉了。
隨著現(xiàn)在數(shù)據(jù)量越來(lái)越多,pandas的局限性也日漸凸顯,在處理大數(shù)據(jù)時(shí)非常惱火,從而選擇更加合適的工具,如pyspark等大數(shù)據(jù)處理框架。
而 Pandas 2.0 也是朝著這個(gè)方向邁出的一步,接下來(lái)我們一起聊一聊Pandas增加和改進(jìn)的內(nèi)容。
更快和更有效的內(nèi)存操作
本次最大的亮點(diǎn)可謂是他們?cè)诤笈_(tái)增加了對(duì)pyarrow的支持,甚至被定義為一場(chǎng)革命(revolution)。

pyarrow后端是pandas 2.0的一個(gè)新功能,它允許用戶使用Apache Arrow作為pandas DataFrames和Series的替代數(shù)據(jù)存儲(chǔ)格式。
這意味著當(dāng)你在pandas 2.0中讀或?qū)慞arquet文件時(shí),它將默認(rèn)使用pyarrow來(lái)處理數(shù)據(jù),從而使操作更快、更節(jié)省內(nèi)存。
什么是Pyarrow?

Pyarrow是一個(gè)提供列式內(nèi)存格式的庫(kù),它是一種組織數(shù)據(jù)的方式,使其更容易讀取和并行處理。
總之,在pandas 2.0中使用pyarrow后端可以使數(shù)據(jù)操作更快、更節(jié)省內(nèi)存,尤其是在處理大型數(shù)據(jù)集時(shí)。

缺失值處理
PyArrow更適合于表格數(shù)據(jù),使其能夠輕松地存儲(chǔ)字符串,最重要的是,使空值處理也更容易。
先前Pandas依靠NumPy來(lái)保存表格數(shù)據(jù),例如字符串、數(shù)字,也包括更復(fù)雜的數(shù)據(jù)。然而,NumPy也有其局限性,從Marc Garcia[2]的文章中可以看到,NumPy不支持字符串和缺失值。因此,對(duì)于缺失的數(shù)字,需要使用一個(gè)特殊的數(shù)字或NaN。這意味著對(duì)于每一種數(shù)據(jù)類型,缺失值的實(shí)現(xiàn)都很復(fù)雜,處理起來(lái)也很棘手。
而這些問(wèn)題在Pandas2.0將會(huì)完美解決,在PyArrow中處理缺失數(shù)據(jù)時(shí),在數(shù)據(jù)數(shù)組的旁邊會(huì)有第二個(gè)數(shù)組,表示一個(gè)值是否存在,使得對(duì)空值的處理更加簡(jiǎn)單明了。
寫入時(shí)復(fù)制優(yōu)化
這是一種內(nèi)存優(yōu)化技術(shù),類似于Spark執(zhí)行代碼的方式,在pandas中用來(lái)提高性能,減少處理大數(shù)據(jù)集時(shí)的內(nèi)存使用。
當(dāng)復(fù)制一個(gè)pandas對(duì)象,比如DataFrame或Series,pandas不是立即創(chuàng)建一個(gè)新的數(shù)據(jù)副本,而將創(chuàng)建一個(gè)對(duì)原始數(shù)據(jù)的引用,并推遲創(chuàng)建一個(gè)新的副本,直到以某種方式修改數(shù)據(jù)。
這意味著,如果你有相同數(shù)據(jù)的多個(gè)副本,它們都可以引用相同的內(nèi)存,直到你對(duì)其中一個(gè)進(jìn)行修改。這可以大大減少內(nèi)存的使用,提高性能,因?yàn)槟悴恍枰獙?duì)數(shù)據(jù)進(jìn)行不必要的復(fù)制。
總的來(lái)說(shuō),寫入時(shí)復(fù)制是一種強(qiáng)大的優(yōu)化技術(shù),可以幫助你更有效地處理大型數(shù)據(jù)集,并減少內(nèi)存。

索引
更好的索引、更快的訪問(wèn)和計(jì)算
以前,pandas只支持int64、uint64和float64類型。
而在Pandas 2.0中,Index將支持所有NumPy的數(shù)字類型,包括int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32和float64。
因此,以前創(chuàng)建64位索引的操作現(xiàn)在可以創(chuàng)建較低位數(shù)的索引,如32位索引。

Pandas 2.0將更快
PyArrow的引入將提大地提高了pandas的性能。這里提供了一個(gè)例子,對(duì)于一個(gè)250萬(wàn)行的字符串系列,在筆記本電腦上使用PyArrow比NumPy快31.6倍。

對(duì)于pandas重度依賴者來(lái)說(shuō),這無(wú)疑是個(gè)非常棒的消息,讓我們一起期待下吧~
來(lái)源:數(shù)據(jù)STUDIO
參考資料
Pandas: https://pandas.pydata.org/
[2]Marc Garcia: https://datapythonista.me/blog/pandas-20-and-the-arrow-revolution-part-i
國(guó)內(nèi)申請(qǐng)微軟新必應(yīng)(New Bing)
