子集Dask DataFrames

时间:2017-10-18 22:30:27

标签: python dask

这是将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)。

1 个答案:

答案 0 :(得分:1)

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

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

您可以通过预先重新分区来粗略控制大小

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

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