问题是如何在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 开始包括Series和Dataframes的mode方法.您可以使用它来填充每列的缺失值(使用自己最常用的值),如下所示
df = df.fillna(df.mode().iloc[0])
Run Code Online (Sandbox Code Playgroud)
小智 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)
大多数时候,您不希望所有列都采用相同的插补策略。例如,您可能需要分类变量的列模式和数字列的列均值或中位数。
例如:
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)