【发布时间】:2018-04-06 00:05:05
【问题描述】:
这是Shuffling data in dask 的后续问题。
我有一个现有的 dask 数据框 df 我希望在其中执行以下操作:
df['rand_index'] = np.random.permutation(len(df))
但是,这会产生错误,Column assignment doesn't support type ndarray。我尝试使用df.assign(rand_index = np.random.permutation(len(df)),它给出了同样的错误。
这是一个最小(非)工作示例:
import pandas as pd
import dask.dataframe as dd
import numpy as np
df = dd.from_pandas(pd.DataFrame({'A':[1,2,3]*10, 'B':[3,2,1]*10}), npartitions=10)
df['rand_index'] = np.random.permutation(len(df))
注意:
使用df = df.map_partitions(add_random_column_to_pandas_dataframe, ...) 提到的上一个问题,但我不确定这是否与这个特殊情况有关。
编辑 1
我尝试过
df['rand_index'] = dd.from_array(np.random.permutation(len_df)) 其中,执行没有问题。当我检查df.head() 时,似乎新列创建得很好。但是,当我查看df.tail() 时,rand_index 是一堆NaNs。
实际上只是为了确认我检查了df.rand_index.max().compute(),结果证明它小于len(df)-1。所以这可能是df.map_partitions 发挥作用的地方,因为我怀疑这是 dask 被分区的问题。在我的特殊情况下,我有 80 个分区(不是指示例案例)。
【问题讨论】: