在 pandas 数据帧上并行调用函数
Posted
技术标签:
【中文标题】在 pandas 数据帧上并行调用函数【英文标题】:Calling functions on pandas dataframe parallely 【发布时间】:2020-10-26 13:54:29 【问题描述】:我有一个 2 亿条记录文件,正在使用 pandas read_csv 以 10000 的块大小读取该文件。这些数据帧正在被转换为一个列表对象,并且这个列表对象被传递给一个函数。
file_name=str(sys.argv[2])
df=pd.read_csv(file_name, na_filter=False, chunksize=10000)
for data in df:
d=data.values.tolist()
load_data(d)
有没有什么办法可以并行调用load_data函数,让10000多条记录同时传给函数?
我尝试使用以下问题中提到的解决方案:
-
Python iterating over a list in parallel?
How to run functions in parallel?
但是这些对我不起作用,因为我需要在调用函数之前先将数据框转换为列表对象。
我们将不胜感激。
【问题讨论】:
【参考方案1】:是的,dask 很擅长这个
试试
import dask.dataframe as dd
dx = dd.read_csv(file_name, na_filter=False)
ans_delayed = dx.apply(my_function, meta='the return type')
ans = ans_delayed.compute()
如果你真的需要数据作为列表,你可以试试
import dask.bag as db
genrator = pd.read_csv(file_name, na_filter=False, chunksize=10000)
ans = db.from_sequence(generator).map(lambda df:
load_data(df.values.tolist())).compute()
【讨论】:
你能用 dask 比 pandas 显示时间改进吗?以上是关于在 pandas 数据帧上并行调用函数的主要内容,如果未能解决你的问题,请参考以下文章