加快将多个csv导入python数据帧的过程

时间:2016-07-12 13:37:52

标签: python csv pandas encoding dataframe

我想从目标目录中读取多个CSV文件(数百个文件,每行数百行但列数相同)到单个Python Pandas DataFrame中。

我写的下面的代码工作但速度太慢。运行30个文件需要几分钟(如果我加载所有文件,我应该等多久)。我可以改变什么来使其更快地运作?

此外,在replace函数中,我想将“_”(不知道编码,但不是正常编码)替换为“ - ”(正常的utf-8),我怎么能那样做?我使用coding=latin-1因为我在文件中有法语口音。

#coding=latin-1

import pandas as pd
import glob

pd.set_option('expand_frame_repr', False)

path = r'D:\Python27\mypfe\data_test'
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
    df = pd.read_csv(file_, index_col = None, header = 0, sep = ';', dayfirst = True, 
                     parse_dates=['HeurePrevue','HeureDebutTrajet','HeureArriveeSurSite','HeureEffective'])
    df.drop(labels=['aPaye','MethodePaiement','ArgentPercu'],axis=1,inplace=True)
    df['Sens'].replace("\n", "-", inplace=True,regex=True)
    list_.append(df)

    print "fichier lu:",file_

frame = pd.concat(list_)

print frame

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作 - 只读取真正需要的列,使用列表理解并调用pd.concat([ ... ], ignore_index=True)一次,因为它很慢:

# there is no sense to read columns that you don't need
# specify the column list (EXCLUDING: 'aPaye','MethodePaiement','ArgentPercu')
cols = ['col1', 'col2', 'etc.']
date_cols = ['HeurePrevue','HeureDebutTrajet','HeureArriveeSurSite','HeureEffective']

df = pd.concat(
        [pd.read_csv(f, sep = ';', dayfirst = True, usecols=cols, 
                     parse_dates=date_cols)
         for f in allFiles
        ],
        ignore_index=True
     )

如果您有足够的内存来存储两个生成的DF ...

,这应该可行