再见 CSV,速度提升 150 倍!
先介紹下為什么要和CSV再見。其實也談不上徹底再見吧,日常還是要用的,這里再介紹一個更加高效的數據格式。
用Python處理數據時保存和加載文件屬于日常操作了,尤其面對大數據量時我們一般都會保存成CSV格式,而不是Excel。一是因為Excel有最大行數1048576的限制,二是文件占用空間更大,保存和加載速度很慢。
雖然用CSV沒有行數限制,相對輕便,但是面對大數據量時還是略顯拉夸,百萬數據量儲存加載時也要等好久。。不過很多同學都借此機會抻抻懶腰、摸摸魚,充分利用時間也不錯。
其實,CSV?并不是唯一的數據存儲格式。今天和大家介紹一個速度超快、更加輕量級的二進制格式保存格式:feather。
#?Feather是什么?
Feather?是一種用于存儲數據幀的數據格式。它最初是為了?Python?和?R?之間快速交互而設計的,初衷很簡單,就是盡可能高效地完成數據在內存中轉換的效率。
現在?Feather?也不僅限于?Python?和?R?了,基本每種主流的編程語言中都可以用?Feather?文件。不過,要說明下,它的數據格式并不是為長期存儲而設計的,一般的短期存儲。
#?如何在Python中操作Feather?
在?Python?中,可以通過?pandas?或?Feather?兩種方式操作。首先需要安裝feather-format。
#?pip? pip?install?feather?-format?#?Anaconda? conda?install?-c?conda-forgefeather-format只需要上面一行安裝即可,很簡單。
我們通過一個較大的數據集舉例,需要?Feather、Numpy?和?pandas?來一起配合。數據集有 5 列和 1000 萬行隨機數。
import?feather import?numpy?as?np import?pandas?as?pdnp.random.seed?=?42 df_size?=?10000000df?=?pd.DataFrame({'a':?np.random.rand(df_size),'b':?np.random.rand(df_size),'c':?np.random.rand(df_size),'d':?np.random.rand(df_size),'e':?np.random.rand(df_size) }) df.head()它的用法和之前csv的操作難度一個水平線,非常簡單。
保存
兩種方式,一是?DataFrame?直接to_feather?的?Feather?格式:
df.to_feather('1M.feather')二是用?Feather?庫執行相同操作的方法:
feather.write_dataframe(df,?'1M.feather')加載
加載也是一樣的,同樣還是兩種方式。一是通過pandas加載:
df?=?pd.read_feather('1M.feather')二是用?Feather?加載:
df?=feather.read_dataframe('1M.feather')操作習慣一樣,難度完全沒有。
#?和CSV的區別
對比產生美。下面來看下feather和csv的差距有多大。下圖顯示了上面本地保存 DataFrame 所需的時間:
差距巨大,有木有!原生?Feather(圖中的Native Feather)比?CSV?快了將近 150 倍左右。如果使用?pandas?處理?Feather?文件并沒有太大關系,但與?CSV?相比,速度的提高是非常顯著的。
然后再看下讀取不同格式的相同數據集需要多長時間。
同樣,差異也很明顯。CSV?的讀取速度要慢得多。并且CSV占用的磁盤空間也更大。
CSV?文件占用的空間是?Feather?文件占用的空間的兩倍多。假如我們每天存儲千兆字節的數據,那么選擇正確的文件格式至關重要。Feather?在這方面完全碾壓了?CSV。
當然,如果追求更多的壓縮空間,也可以試試Parquet,也是一個可以替代CSV?的格式。
#?結語
說了這么多,可能很多同學還是甩出一句話:謝謝,我選CSV。?這個東西怎么說呢,當你需要它時,它就有用,如果日常沒有速度和空間的強烈需求,還是老老實實CSV吧。CSV已經用慣了,改變使用習慣還是挺難的。
系列推薦:
牛逼!Python常用數據類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)
牛逼!Python函數和文件操作(長文系列第3篇)
牛逼!Python錯誤、異常和模塊(長文系列第4篇)
推薦閱讀
Pandas處理數據太慢,來試試Polars吧!
懶人必備!只需一行代碼,就能導入所有的Python庫
絕!關于pip的15個使用小技巧
介紹10個常用的Python內置函數,99.99%的人都在用!
可能是全網最完整的 Python 操作 Excel庫總結!
總結
以上是生活随笔為你收集整理的再见 CSV,速度提升 150 倍!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛逼!Python错误、异常和模块(长文
- 下一篇: “有一个产品经理的女朋友是什么体验?”