gpt4 book ai didi

python - 将数据帧附加到多处理目标函数之外的列表

转载 作者:行者123 更新时间:2023-12-01 07:27:04 25 4
gpt4 key购买 nike

我想使用多重处理来读取 csv 并将它们添加在一起。在这种情况下,它可以是未排序的。我使用了这段代码,但显然由于某种原因无法将数据帧添加到数据中。我也尝试过data=data.append(tb,ignore_index=True)。我还尝试在函数中使用全局数据,但仍然没有结果。

files=[]
for x in glob.glob("*.csv"):
files.append(x)

data = pd.DataFrame()

def opener(file):
tb=pd.read_csv(file)
data.append(tb,ignore_index=True)

if __name__ == '__main__':
p = Pool(8)
p.map(opener, files)
p.close()
p.join()

print(data)

我只得到

Empty DataFrame 
Columns: []
Index: []

最佳答案

多处理方法中将数据帧作为共享数据结构传递将是相当有问题的,因为需要对共享结构进行pickle/pack并传递给并行运行的每个Process .
相反,将共享列表作为进程安全传递 multiprocessing.Manager.list累积数据帧,然后通过 pd.concat 调用将其串联起来:

顺便说一句,与 (pd.DataFrame() + multiple .append() 相比,pd.concat 应该是首选方法> 通话)。

from multiprocessing import Pool, Manager
import glob
import pandas as pd
from functools import partial

def csv_to_df(lst, fname):
lst.append(pd.read_csv(fname))


if __name__ == '__main__':
dfs_list = Manager().list()
pool = Pool(processes=8)
files = glob.iglob('*.csv')
res = pool.map_async(partial(csv_to_df, dfs_list), files)
res.wait()
dfs = pd.concat(dfs_list, ignore_index=True) # the final result
print(dfs)

关于python - 将数据帧附加到多处理目标函数之外的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com