在 Pandas 中使用多处理读取 csv 文件的最简单方法

新手上路,请多包涵

这是我的问题。

一堆 .csv 文件(或其他文件)。 Pandas 是一种读取它们并保存为 Dataframe 格式的简单方法。但是当文件量很大时,我想用多处理来读取文件以节省一些时间。

我早期的尝试

我手动将文件分成不同的路径。分别使用:

 os.chdir("./task_1")
files = os.listdir('.')
files.sort()
for file in files:
    filename,extname = os.path.splitext(file)
    if extname == '.csv':
        f = pd.read_csv(file)
        df = (f.VALUE.as_matrix()).reshape(75,90)

然后将它们组合起来。

如何使用 pool 运行它们来解决我的问题?

任何意见,将不胜感激!

原文由 Han Zhengzu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

使用 Pool

 import os
import pandas as pd
from multiprocessing import Pool

# wrap your csv importer in a function that can be mapped
def read_csv(filename):
    'converts a filename to a pandas dataframe'
    return pd.read_csv(filename)

def main():

    # get a list of file names
    files = os.listdir('.')
    file_list = [filename for filename in files if filename.split('.')[1]=='csv']

    # set up your pool
    with Pool(processes=8) as pool: # or whatever your hardware can support

        # have your pool map the file names to dataframes
        df_list = pool.map(read_csv, file_list)

        # reduce the list of dataframes to a single dataframe
        combined_df = pd.concat(df_list, ignore_index=True)

if __name__ == '__main__':
    main()

原文由 zemekeneng 发布,翻译遵循 CC BY-SA 4.0 许可协议

dask 库旨在解决您的问题。

原文由 Zeugma 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题