使用多处理时结合 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会发生错误