大熊猫中类别的缺失值的估算

Igo*_*nov 26 python r pandas

问题是如何在pandas数据帧中为类别列填充最常用级别的NaN?

在R randomForest包中有 na.roughfix选项:A completed data matrix or data frame. For numeric variables, NAs are replaced with column medians. For factor variables, NAs are replaced with the most frequent levels (breaking ties at random). If object contains no NAs, it is returned unaltered.

在Pandas中我可以用以下数字填充NaN值:

df = df.fillna(df.median())
Run Code Online (Sandbox Code Playgroud)

hel*_*err 47

您可以使用df = df.fillna(df['Label'].value_counts().index[0])来自一列的最常值填充NaN.

如果您想要使用自己最常用的值填充每个列,您可以使用

df = df.apply(lambda x:x.fillna(x.value_counts().index[0]))

更新 2018-25-10⬇

0.13.1pandas 开始包括SeriesDataframes的mode方法.您可以使用它来填充每列的缺失值(使用自己最常用的值),如下所示

df = df.fillna(df.mode().iloc[0])
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,它有效。我还发现我可以用 numpy `np.asscalar((mode(df['Label'])[0]))` (2认同)

小智 7

def fillna(col):
    col.fillna(col.value_counts().index[0], inplace=True)
    return col
df=df.apply(lambda col:fillna(col))
Run Code Online (Sandbox Code Playgroud)


Sar*_*rah 5

大多数时候,您不希望所有列都采用相同的插补策略。例如,您可能需要分类变量的列模式和数字列的列均值或中位数。

例如:

df = pd.DataFrame({'num': [1.,2.,4.,np.nan],'cate1':['a','a','b',np.nan],'cate2':['a','b','b',np.nan]})

# numeric columns
>>> df.fillna(df.select_dtypes(include='number').mean().iloc[0], inplace=True)

# categorical columns
>>> df.fillna(df.select_dtypes(include='object').mode().iloc[0], inplace=True)

>>> print(df)

     num cate1 cate2
 0 1.000     a     a
 1 2.000     a     b
 2 4.000     b     b
 3 2.333     a     b
Run Code Online (Sandbox Code Playgroud)