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

加快将多个csv导入python数据帧的过程,python,csv,pandas,encoding,dataframe,Python,Csv,Pandas,Encoding,Dataframe,我希望将多个CSV文件(数百个文件,每行数百行,但列数相同)从目标目录读取到单个Python数据帧中 下面的代码我写的工作,但太慢。它需要几分钟来运行30个文件(那么,我应该等待多久,如果我加载我的所有文件)。我可以改变什么使它工作得更快 此外,在replace函数中,我想将一个“u2;”(不知道编码,但不是一个正常的编码)替换为一个“-”(正常的utf-8),我该如何处理?我使用coding=latin-1,因为文件中有法语口音 #coding=latin-1 import pandas a

我希望将多个CSV文件(数百个文件,每行数百行,但列数相同)从目标目录读取到单个Python数据帧中

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

此外,在
replace
函数中,我想将一个“u2;”(不知道编码,但不是一个正常的编码)替换为一个“-”(正常的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

您可以尝试以下方法-只阅读真正需要的列,使用列表理解并调用
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
     )

如果您有足够的内存来存储两个生成的DFs,则应该可以使用此功能

在使用Python之前,是否可以将所有文件连接在一起?这样就只有一个文件被读取了?另一种方法是
zip
将文件放在一起,这将使您可以随机访问,但同时还可以利用操作系统的文件缓存。要将所有文件制作成一个csv文件?对于
zip
,在哪一步?是的,制作一个大的CSV文件或制作一个
zip
文件。这些与Python无关;您必须在Python外部执行此操作。一旦你有了一个包含所有数据的文件,然后让你的Python脚本直接读取该文件。这听起来像是一个解决方案。但如何自动做到这一点?如何制作
zip
文件?我仍然喜欢在python内部执行此操作,因为我不知道要读取多少文件。它适用于
date\u cols
,但当涉及
usecols
,它会返回一个错误:
ValueError:usecols不匹配名称。如果我使用列数,它会给出反馈:
indexer:list index超出范围
那么,您必须在
cols
列表中指定所需的列名-我认为错误消息
ValueError:Usecols不匹配名称
是不言自明的。。。