我正在寻找计算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()
而且我期望的计算输出不会继续。