子集 Dask DataFrame

Subsetting Dask DataFrames

这是将 dask 数据帧的子集加载到内存的有效方法吗:

while i < len_df:
    j = i + batch_size 
    if j > len_df: 
        j = len_df
    subset = df.loc[i:j,'source_country_codes'].compute()

我在某处读到这可能不正确,因为 dask 分配索引号的方式是将较大的数据帧划分为较小的 pandas dfs。此外,我认为 dask 数据帧没有 iloc 属性。 我正在使用版本 0.15.2

就用例而言,这将是一种将批量数据加载到深度学习(比如 keras)的方法。

如果您的数据集有众所周知的划分,那么这可能会奏效,但我建议一次只计算一个分区。

for part in df.to_delayed():
    subset = part.compute()

事先重新分区可以大致控制大小

for part in df.repartition(npartitions=100).to_delayed():
    subset = part.compute()

这并不完全相同,因为它不能保证每个分区中的行数固定,但这种保证可能非常昂贵,具体取决于数据的获取方式。