如何使用Dask将函数应用于大型数据集的单个列?

8
如果想在使用Dask处理大型数据集时,对单列进行对数计算,应该如何操作?
df_train.apply(lambda x: np.log1p(x), axis=1 , meta={'column_name':'float32'}).compute()

数据集非常庞大(1.25亿行),我该怎么做?

df_train.float32.map(np.log1p) 怎么样? - cs95
1个回答

5

您有几个选项:

使用dask.array函数

就像您的pandas dataframe可以使用numpy函数一样

import numpy as np
result = np.log1p(df.x)

Dask数据框可以使用Dask数组函数。
import dask.array as da
result = da.log1p(df.x)

映射分区

但是,也许没有适用于您特定函数的dask.array函数。 您始终可以使用map_partitions,在您的dask dataframe中应用任何通常在pandas数据帧上完成的函数,涵盖所有组成您dask dataframe的pandas数据帧。

Pandas

result = f(df.x)

Dask DataFrame

result = df.x.map_partitions(f)

映射

你可以使用mapapply(axis=0)方法,但就像在Pandas中一样,这些方法通常对性能非常不利。


谢谢,所以进行计算只需要:result = df_train.unit_sales.map_partitions(np.log1p).compute()? - ambigus9
是的,或者da.log1p(df_train.unit_sales),就像上面的第一个例子一样。 - MRocklin
当我使用.compute()运行时,我的电脑又开始冻结了,这是因为我试图计算整个数据集的1.25亿行吗? - ambigus9
1
那个评论似乎与这个问题无关。我建议你在最近提出的另一个问题上询问,那个问题更相关。你也可以考虑编辑原始问题,包括更多细节,比如“如何检查是否安全调用计算”,而不是在评论中进行对话。 - MRocklin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接