為什么要和CSV再見?
來介紹下為什么要和CSV
再見。其實(shí)也談不上徹底再見吧,日常還是要用的,這里再介紹一個(gè)更加高效的數(shù)據(jù)格式。用Python
處理數(shù)據(jù)時(shí)保存和加載文件屬于日常操作了,尤其面對大數(shù)據(jù)量時(shí)我們一般都會保存成CSV
格式,而不是Excel
。一是因?yàn)?code>Excel有最大行數(shù)1048576的限制,二是文件占用空間更大,保存和加載速度很慢。雖然用CSV
沒有行數(shù)限制,相對輕便,但是面對大數(shù)據(jù)量時(shí)還是略顯拉夸,百萬數(shù)據(jù)量儲存加載時(shí)也要等好久。。不過很多同學(xué)都借此機(jī)會抻抻懶腰、摸摸魚,充分利用時(shí)間也不錯(cuò)。其實(shí),CSV
并不是唯一的數(shù)據(jù)存儲格式。今天和大家介紹一個(gè)速度超快、更加輕量級的二進(jìn)制格式保存格式:feather。Feather是什么?
Feather
是一種用于存儲數(shù)據(jù)幀的數(shù)據(jù)格式。它最初是為了 Python
和 R
之間快速交互而設(shè)計(jì)的,初衷很簡單,就是盡可能高效地完成數(shù)據(jù)在內(nèi)存中轉(zhuǎn)換的效率。現(xiàn)在 Feather
也不僅限于 Python
和 R
了,基本每種主流的編程語言中都可以用 Feather
文件。不過,要說明下,它的數(shù)據(jù)格式并不是為長期存儲而設(shè)計(jì)的,一般的短期存儲。如何在Python中操作Feather?
在 Python
中,可以通過 pandas
或 Feather
兩種方式操作。首先需要安裝feather-format
。# pip
pip install feather -format
# Anaconda
conda install -c conda-forgefeather-format
我們通過一個(gè)較大的數(shù)據(jù)集舉例,需要 Feather
、Numpy
和 pandas
來一起配合。數(shù)據(jù)集有 5 列和 1000 萬行隨機(jī)數(shù)。import feather
import numpy as np
import pandas as pd
np.random.seed = 42
df_size = 10000000
df = 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
的操作難度一個(gè)水平線,非常簡單。兩種方式,一是 DataFrame
直接to_feather
的 Feather
格式:df.to_feather('1M.feather')
二是用 Feather
庫執(zhí)行相同操作的方法:feather.write_dataframe(df, '1M.feather')
加載也是一樣的,同樣還是兩種方式。一是通過pandas
加載:df = pd.read_feather('1M.feather')
df =feather.read_dataframe('1M.feather')
和CSV的區(qū)別
對比產(chǎn)生美。下面來看下feather
和csv
的差距有多大。下圖顯示了上面本地保存 DataFrame 所需的時(shí)間:差距巨大,有木有!原生 Feather
(圖中的Native Feather
)比 CSV
快了將近 150 倍左右。如果使用 pandas
處理 Feather
文件并沒有太大關(guān)系,但與 CSV
相比,速度的提高是非常顯著的。然后再看下讀取不同格式的相同數(shù)據(jù)集需要多長時(shí)間。同樣,差異也很明顯。CSV
的讀取速度要慢得多。并且CSV
占用的磁盤空間也更大。CSV
文件占用的空間是 Feather
文件占用的空間的兩倍多。假如我們每天存儲千兆字節(jié)的數(shù)據(jù),那么選擇正確的文件格式至關(guān)重要。Feather
在這方面完全碾壓了 CSV
。當(dāng)然,如果追求更多的壓縮空間,也可以試試Parquet
,也是一個(gè)可以替代CSV
的格式。結(jié)語
說了這么多,可能很多同學(xué)還是甩出一句話:謝謝大佬,我選CSV。 這個(gè)東西怎么說呢,當(dāng)你需要它時(shí),它就有用,如果日常沒有速度和空間的強(qiáng)烈需求,還是老老實(shí)實(shí)CSV
吧。CSV
已經(jīng)用慣了,改變使用習(xí)慣還是挺難的。