在数据分析工作中,csv、excel、pinkle这三种格式的文件经常会被用到,但是pandas读取这3种格式的数据究竟性能如何呢,我准备了13列 17519行的excel数据
测试了一下,结果是这样:
csv | xls | pickle | |
字节数MB | 1.26 | 1.09 | 1.13 |
读数据耗费时间:秒 | 0.044 | 4.992 | 0.009 |
写数据耗费时间:秒 | 0.336 | 15.982 | 0.01 |
从这个测试结果可以得到以下结论:
xls格式的数据占磁盘空间最小,读写速度最慢,但是最直观
pickle格式的数据读写速度最高,csv次之,但是最不直观
简而言之,xls格式的数据是给人看的,因此最直观,但是读写速度最慢,pickle格式的数据是给机器用的,因此读写速度最高,但是最不直观。
测试代码如下:
import pandas as pd
import time
import pickle
def use_time(fun):
def wrap(*args, **kw):
start = time.time()
result = fun(*args, **kw)
end = round(time.time()-start,3)
print('{0} 耗费时间{1}'.format(fun.__name__,end))
return result #,end 这里可以返回每个被调用的方法的具体耗费时间
return wrap
# 写pickle文件
@use_time
def writePickle(df,file):
df.to_pickle(file)
# 写csv
@use_time
def writeCsv(df,file):
df.to_csv(file)
# 写excel
@use_time
def writeExcel(df,file):
df.to_excel(file)
# 读取xls文件
@use_time
def readExcel(file):
df = pd.read_excel(file)
return df
# 读取pickle文件
@use_time
def readPickle(file):
df = pd.read_pickle(file)
return df
#读csv
@use_time
def readCsv(file):
df = pd.read_csv(file)
return df
srcfile = r'E:\pandas\2019.xlsx'
dest_xls = r'E:\pandas\2019_.xlsx'
dest_pkl = r'E:\pandas\2019.pkl'
dest_csv = r'E:\pandas\2019.csv'
def testRead():
df1 = readPickle(dest_pkl)
df2 = readCsv(dest_csv)
df3 = readExcel(srcfile)
def testWrite():
df1 = readExcel(srcfile)
print('-'*50)
writePickle(df1,dest_pkl)
writeCsv(df1,dest_csv)
writeExcel(df1,dest_xls)
def test():
#先测试写
testWrite();
print('*'* 50)
# 后测试读
testRead()
test()
我测试时是先创建好2019.xlsx,然后用pandas把这个文件保存成csv pickle两种格式,然后再测试读取xls csv pickle,因此运行测试代码时也是这个顺序。运行结果如下:
readExcel 耗费时间5.099
--------------------------------------------------
writePickle 耗费时间0.016
writeCsv 耗费时间0.426
writeExcel 耗费时间12.865
**************************************************
readPickle 耗费时间0.008
readCsv 耗费时间0.046
readExcel 耗费时间5.148
多次运行后发现这里的时间总是变化的,但是基本的趋势不变,比如读写pickle总是最快的。