多处理熊猫将read_excel放入数据框

时间:2018-10-24 11:35:09

标签: python dataframe multiprocessing

我有6个.xlsx文件。通过以下代码,我将其中之一存储在名为“ df_documents”的数据框中:

df_documents = pd.read_excel(path_input+name_DOCUMENTSESSENTIAL+fileending_input,
                             names=column_DOCUMENTSESSENTIAL)

由于xlsx文件的大小,我进行了一些研究以加快速度。多处理是必经之路:

def read_csv(filename):
return pd.read_excel('input/' + filename)


def main():

pool = Pool(processes=8)

files = os.listdir('input/')
file_list = [filename for filename in files if filename.split('.')[1] == 'xlsx']

df_list = pool.map(read_csv, file_list)

print(df_list)


if __name__ == '__main__':
main()

print("--- %s seconds ---" % (time.time() - start_time))

如何从“ return pd.read_excel”访问不同的数据框?有没有办法给他们指定具体的名字?我知道我可以访问“ df_list”-但我不知道哪个文件位于哪个数据帧df_list [number]中。

1 个答案:

答案 0 :(得分:1)

类似这样的东西,应该返回一个元组列表。

每个元组中的第一个元素代表文件名,第二个是数据帧。本质上,唯一的区别是read_csv命令上的return语句。

import pandas as pd
import numpy as np
import os
import time
from multiprocessing import Pool


def read_csv(filename):
    return (filename, pd.read_excel(os.path.join('input', filename))


def main():
    start_time = time.time()
    pool = Pool(processes=8)

    files = os.listdir('input')
    file_list = [filename 
                 for filename in files 
                 if filename.endswith('.xlsx')]

    df_list = pool.map(read_csv, file_list)

    print(df_list)
    print("--- %s seconds ---" % (time.time() - start_time))


if __name__ == '__main__':
    main()