Pandas讀取文件的效率-CSV VS Pickle

讀取csv文件

import pandas as pd
csv_path = 'gun_deaths_in_america.csv'
data_csv = pd.read_csv(csv_path,header=0)
data_csv.head()
image.png
data_csv.shape
(100798, 10)
%timeit pd.read_csv(csv_path,header=0)
114 ms ± 5.38 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

查看文件大小

查看本地文件大小

import os
os.stat('gun_deaths_in_america.csv').st_size # 單位是byte
4824404

查看占用內(nèi)存大小

data_csv.memory_usage(deep=True).sum()
30368107

查看每一列占用內(nèi)存大小

  • object 類型占用內(nèi)存空間很大
  • int/float類型占用內(nèi)存小
data_csv.memory_usage(deep=True)
Index             80
year          806384
month         806384
intent       6495168
police        806384
sex          6249476
age           806384
race         6322009
hispanic      806384
place        6463070
education     806384
dtype: int64
data_csv.dtypes
year           int64
month          int64
intent        object
police         int64
sex           object
age          float64
race          object
hispanic       int64
place         object
education    float64
dtype: object

保存為Pickle文件

直接保存為Pickle文件

保存為本地文件后屎即,文件大小比原文件大。

data_csv.to_pickle('gun_deaths_in_america_before_transform.pkl')
pkl_path_before = 'gun_deaths_in_america_before_transform.pkl'
os.stat(pkl_path_before).st_size
5656925

對比文件讀取速度

pickle文件的讀取速度比csv文件讀取速度快2倍 酪耳!

%timeit pd.read_csv(csv_path,header=0)
102 ms ± 7.34 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit pd.read_pickle(pkl_path_before)
32.4 ms ± 5.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

類型轉(zhuǎn)換后保存為Pickle文件

剛才看到object類型很占內(nèi)存寒跳,可以將其轉(zhuǎn)換為category類型禽翼。

data_csv.intent.astype('category').head()
0    Suicide
1    Suicide
2    Suicide
3    Suicide
4    Suicide
Name: intent, dtype: category
Categories (4, object): [Accidental, Homicide, Suicide, Undetermined]

先準(zhǔn)換intent列,對比object的6495168,category的大小為object的1/65.

data_csv.intent.astype('category').memory_usage(deep=True)
101303

將所有數(shù)據(jù)轉(zhuǎn)換成category類型

for col in data_csv.columns:
    data_csv[col] = data_csv[col].astype('category')

查看轉(zhuǎn)換后占用內(nèi)存大小辖试,相比轉(zhuǎn)換前的303688107喊暖,轉(zhuǎn)換后的內(nèi)存大小減小57倍惫企。

data_csv.memory_usage(deep=True).sum()
1018587

將轉(zhuǎn)換后的數(shù)據(jù)保存為pickle文件,并查看pickle本地文件大小哄啄。相比轉(zhuǎn)換前的4824404雅任,轉(zhuǎn)換后的文件的大小減小4倍。

data_csv.to_pickle('gun_deaths_in_america_after_transform.pkl')
pkl_path_after = 'gun_deaths_in_america_after_transform.pkl'
os.stat(pkl_path_after).st_size
1012643

對比文件讀取速度咨跌,比轉(zhuǎn)換前快42倍沪么。

%timeit pd.read_pickle(pkl_path_after)
2.57 ms ± 262 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit pd.read_csv(csv_path,header=0)
106 ms ± 3.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

綜合對比

files = [csv_path,pkl_path_before,pkl_path_after]

對比本地文件大小

轉(zhuǎn)換后的文件占用磁盤空間最小,比原文件小4倍锌半,對于保存大量數(shù)據(jù)非常有用禽车。

for file in files:
    print('File size of the {0} is {1}:  '.format(file,os.stat(file).st_size))
File size of the gun_deaths_in_america.csv is 4824404:  
File size of the gun_deaths_in_america_before_transform.pkl is 5656925:  
File size of the gun_deaths_in_america_after_transform.pkl is 1012643:  

對比文件讀取速度

轉(zhuǎn)換后的讀取速度比普通csv文件的讀取速度快42倍寇漫。

%timeit pd.read_csv(csv_path,header=0)
97.5 ms ± 3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit pd.read_pickle(pkl_path_before)
28.5 ms ± 1.33 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit pd.read_pickle(pkl_path_after)
2.18 ms ± 141 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

對比占用內(nèi)存大小

轉(zhuǎn)換后占用內(nèi)存比轉(zhuǎn)換前小30倍。

for file in files:
    if os.path.splitext(file)[1]=='.csv':
        print('memory_usage of the {0} is : {1}'. \
            format(file,pd.read_csv(file,header=0).memory_usage(deep=True).sum()))
    else:
        print('memory_usage of the {0} is : {1}'. \
            format(file,pd.read_pickle(file).memory_usage(deep=True).sum()))
memory_usage of the gun_deaths_in_america.csv is : 30368107
memory_usage of the gun_deaths_in_america_before_transform.pkl is : 30368107
memory_usage of the gun_deaths_in_america_after_transform.pkl is : 1010827

讀取的數(shù)據(jù)都是一樣的殉摔,就是數(shù)據(jù)類型不一樣州胳。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逸月,隨后出現(xiàn)的幾起案子栓撞,更是在濱河造成了極大的恐慌,老刑警劉巖碗硬,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤湘,死亡現(xiàn)場離奇詭異,居然都是意外死亡恩尾,警方通過查閱死者的電腦和手機(jī)弛说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翰意,“玉大人木人,你說我怎么就攤上這事〖脚迹” “怎么了醒第?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔫磨。 經(jīng)常有香客問我淘讥,道長,這世上最難降的妖魔是什么堤如? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任蒲列,我火速辦了婚禮,結(jié)果婚禮上搀罢,老公的妹妹穿的比我還像新娘蝗岖。我一直安慰自己,他們只是感情好榔至,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布抵赢。 她就那樣靜靜地躺著,像睡著了一般唧取。 火紅的嫁衣襯著肌膚如雪铅鲤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天枫弟,我揣著相機(jī)與錄音邢享,去河邊找鬼。 笑死淡诗,一個胖子當(dāng)著我的面吹牛骇塘,可吹牛的內(nèi)容都是我干的伊履。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼款违,長吁一口氣:“原來是場噩夢啊……” “哼唐瀑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起插爹,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哄辣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赠尾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柔滔,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年萍虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片形真。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡杉编,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咆霜,到底是詐尸還是另有隱情邓馒,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蛾坯,位于F島的核電站光酣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脉课。R本人自食惡果不足惜救军,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倘零。 院中可真熱鬧唱遭,春花似錦、人聲如沸呈驶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袖瞻。三九已至司致,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聋迎,已是汗流浹背脂矫。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留砌庄,地道東北人羹唠。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓奕枢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佩微。 傳聞我的和親對象是個殘疾皇子缝彬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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