这是Subsetting Dask DataFrames的后续问题.我希望在将数据批量发送到ML算法之前对来自dask数据帧的数据进行混洗.
该问题的答案是做以下事情:
for part in df.repartition(npartitions=100).to_delayed():
batch = part.compute()
Run Code Online (Sandbox Code Playgroud)
然而,即使我要改变批次的内容,我也有点担心它可能不太理想.数据是一个时间序列集,因此数据点在每个分区内高度相关.
理想情况下我喜欢的是:
rand_idx = np.random.choice(len(df), batch_size, replace=False)
batch = df.iloc[rand_idx, :]
Run Code Online (Sandbox Code Playgroud)
哪个适用于熊猫,但不适用于dask.有什么想法吗?
我试过了
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]
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试这样做,则train_df.loc[:5,:].compute()返回一个124451行数据帧.所以显然使用dask错了.
对于dask DataFrame,pandas中的sort_values相当于什么?我正在尝试扩展一些具有内存问题的Pandas代码,而不是使用dask DataFrame.
相当于:
ddf.set_index([col1, col2], sorted=True)
Run Code Online (Sandbox Code Playgroud)
?