有没有办法并行化熊猫'追加方法?

时间:2015-05-14 20:32:25

标签: python csv pandas

我有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")

2 个答案:

答案 0 :(得分: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 - 它取决于文件,磁盘等。

答案 1 :(得分:1)

将它们读入列表然后调用public void doSomething(Object param){ . . . JAXBElement<??????> jaxb = new JAXBElement<??????> (new QName("uri","local"),?????.class, param); . . . } 会更高效:

concat

类似

merged = pd.concat(df_list)

重复附加到数据帧的问题是必须分配内存以适应新大小并复制内容,实际上您只需要执行一次。