2015-05-14 59 views
3

我有100个XLS文件,我想合并成一个CSV文件。有没有办法提高将它们结合在一起的速度?有没有办法将熊猫的追加方法并行化?

这与使用Concat的问题是,它缺乏论据to_csv得到我:

listOfFiles = glob.glob(file_location) 
frame = pd.DataFrame() 
for idx, a_file in enumerate(listOfFiles): 
    print a_file 
    data = pd.read_excel(a_file, sheetname=0, skiprows=range(1,2), header=1) 

    frame = frame.append(data) 

# Save to CSV.. 
print frame.info() 
frame.to_csv(output_dir, index=False, encoding='utf-8', date_format="%Y-%m-%d") 

回答

1

它会是更好的性能,将其读入一个列表,然后调用concat

merged = pd.concat(df_list) 

所以像

df_list=[] 
for f in xl_list: 
    df_list.append(pd.read_csv(f)) # or read_excel 

merged = pd.concat(df_list) 

问题与重复追加对一个数据帧来说,内存必须被分配来适应新的大小和复制的内容,而实际上你只需要这样做一次。

2

使用multiprocessing,你可以使用类似并行阅读:

import multiprocessing 
import pandas as pd 

dfs = multiprocessing.Pool().map(df.read_excel, f_names) 

,然后将它们串联到一个单一的一个:

df = pd.concat(dfs) 

你或许应该检查第一一部分是在所有的速度比

dfs = map(df.read_excel, f_names) 

YMMV - 它取决于文件,磁盘等。

相关问题