【发布时间】:2018-04-01 05:09:58
【问题描述】:
这是Subsetting Dask DataFrames 的后续问题。我希望在将数据批量发送到 ML 算法之前,对 dask 数据帧 中的数据进行洗牌。
该问题的答案是执行以下操作:
for part in df.repartition(npartitions=100).to_delayed():
batch = part.compute()
但是,即使我要洗牌批次的内容,我也有点担心它可能不理想。数据是一个时间序列集,因此每个分区内的数据点高度相关。
我最理想的情况是:
rand_idx = np.random.choice(len(df), batch_size, replace=False)
batch = df.iloc[rand_idx, :]
这适用于 pandas 但不适用于 dask。有什么想法吗?
编辑 1:潜在解决方案
我试过了
train_len = int(len_df*0.8)
idx = np.random.permutation(len_df)
train_idx = idx[:train_len]
test_idx = idx[train_len:]
train_df = df.loc[train_idx]
test_df = df.loc[test_idx]
但是,如果我尝试执行 train_df.loc[:5,:].compute() 这将返回 124451 行数据框。很明显使用 dask 是错误的。
【问题讨论】: