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