使用多处理时结合 Pandas DataFrames

Posted

技术标签:

【中文标题】使用多处理时结合 Pandas DataFrames【英文标题】:Combine Pandas DataFrames when using multiprocessing 【发布时间】:2021-12-09 10:25:35 【问题描述】:

我正在使用多处理,并为每个进程生成一个 pandas DataFrame。我想将它们合并在一起并输出数据。以下策略似乎几乎可以工作,但是当尝试使用df.read_csv() 读取数据时,它只使用第一个name 作为列标题。

from multiprocessing import Process, Lock

def foo(name, lock):
    d = f'name': [1, 2]
    df = pd.DataFrame(data=d)

    lock.acquire()
    try:
        df.to_csv('output.txt', mode='a')
    finally:
        lock.release()

if __name__ == '__main__':
    lock = Lock()

    for name in ['bob','steve']
        p = Process(target=foo, args=(name, lock))
        p.start()
    p.join()

【问题讨论】:

您是否希望列水平连接? CSV 文件不这样做。您可以考虑使用multiprocessing.Queue 将您的最终结果传递回原始进程,并让主进程负责组合事物。 @TimRoberts 这是一个很好的解决方案,然后我可以合并数据帧并同时写出,这是有道理的。 【参考方案1】:

你可以使用multiprocessing.Pool:

import multiprocessing
import pandas as pd

def foo(name):
    d = f'name': [1, 2]
    df = pd.DataFrame(data=d)
    return df

if __name__ == '__main__':
    data = ['bob', 'steve']
    with multiprocessing.Pool(2) as pool:
        data = pool.map(foo, data)
    pd.concat(data, axis=1).to_csv('output.csv')

输出:

>>> pd.concat(data, axis=1)
   bob  steve
0    1      1
1    2      2

【讨论】:

以上是关于使用多处理时结合 Pandas DataFrames的主要内容,如果未能解决你的问题,请参考以下文章

Pandas总结第一节 Pandas 简介与Series,DataFrame的创建

Python:使用多线程修改pandas DataFrame时,Spyder会发生错误

Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出

AI常用框架和工具丨2. 数据分析处理库Pandas

AI常用框架和工具丨2. 数据分析处理库Pandas

pandas笔记