首页 > 解决方案 > 计算存储在数据框中的延迟对象

问题描述

我正在寻找计算dask delayed存储在数据框中的许多对象的最佳方法。我不确定是否pandas应该将数据框转换为其中dask包含delayed对象的数据框,或者是否compute应该对数据框的所有值调用调用pandas

一般来说,我会很感激任何建议,因为我在delayed通过嵌套的 for 循环传递对象的逻辑上遇到了麻烦。

import numpy as np
import pandas as pd
from scipy.stats import hypergeom
from dask import delayed, compute

steps = 5
sample = [int(x) for x in np.linspace(5, 100, num=steps)]
enr_df = pd.DataFrame()

for N in sample:
    enr = []
    for i in range(20):
        k = np.random.randint(1, 200)
        enr.append(delayed(hypergeom.sf)(k=k, M=10000, n=20, N=N, loc=0))
    enr_df[N] = enr

compute如果不对所有单元格应用该函数,我就无法调用这个数据框:(enr_df.applymap(compute)我相信它会compute单独调用每个值)。

但是,如果我转换为dask数据框,delayed我想要计算的对象将在dask数据框结构中分层:

enr_dd = dd.from_pandas(enr_df, npartitions=1)
enr_dd.compute()

而且我期望的计算输出不会继续。

标签: python-3.xpandasdaskdask-delayed

解决方案


您可以将延迟对象列表传递到dask.compute

results = dask.compute(*list_of_delayed_objects)

所以你需要从你的 Pandas 数据框中获取一个列表。这是您可以使用普通 Python 代码执行的操作。


推荐阅读