pandas读写csv excel pinkle 的性能比较

在数据分析工作中,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总是最快的。

你可能感兴趣的:(数据分析,Pandas,数据分析,python)