在列中随机设置na的三分之一为一个值,其余值为另一个值

问题描述:

我试图在数据框df中推测缺失值。我有一个列A与300 NaN's。我想随机设置它的2/3到value1,其余的到value2在列中随机设置na的三分之一为一个值,其余值为另一个值

请帮忙。

编辑:我实际上试图在dask上,这不支持项目分配。这是我目前的。起初,我以为我会尽力把所有NA'svalue1

da.where(df.A.isnull() == True, 'value1', df.A) 

我得到了以下错误:

ValueError: need more than 0 values to unpack 
+0

你有没有试过[Series.where](http://dask.pydata.org/en/latest/dataframe-api.html#dask.dataframe.Series.where)? – MRocklin

由于意见建议,你可以用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'。

请注意,根据您的数据,这可能会改变列的数据类型。