在列中随机设置na的三分之一为一个值,其余值为另一个值
问题描述:
我试图在数据框df
中推测缺失值。我有一个列A
与300 NaN's
。我想随机设置它的2/3到value1
,其余的到value2
。在列中随机设置na的三分之一为一个值,其余值为另一个值
请帮忙。
编辑:我实际上试图在dask上,这不支持项目分配。这是我目前的。起初,我以为我会尽力把所有NA's
到value1
da.where(df.A.isnull() == True, 'value1', df.A)
我得到了以下错误:
ValueError: need more than 0 values to unpack
答
由于意见建议,你可以用Series.where
解决这个问题。
下面的工作,但我不能保证这是多高效。 (我怀疑它可能是更好一下子产生替代的一整列与numpy.choice
)
df['A'] = d['A'].where(~d['A'].isnull(),
lambda df: df.map(
lambda x: random.choice(['value1', 'value1', x])))
解释:如果该值不为空(NAN),肯定保持原来的。如果它为null,则用第一个lambda生成的数据帧的相应值进行替换。这映射数据框(块)的值,以随机选择1/3的原始值和其他值的'值1'。
请注意,根据您的数据,这可能会改变列的数据类型。
你有没有试过[Series.where](http://dask.pydata.org/en/latest/dataframe-api.html#dask.dataframe.Series.where)? – MRocklin