在类别列和数字列中一次替换缺失值

时间:2019-05-19 20:37:32

标签: python pandas

是否可以同时替换分类列和数字列中的NAN值?

一个非常简单的例子:

data = {'col_1': [3, np.nan, 1, 2], 'col_2': ['a', 'a', np.nan, 'd']}
df = pd.DataFrame.from_dict(data)

数据框:

    col_1   col_2
0   3.0     a
1   NaN     a
2   1.0    NaN
3   0.0     d

目标:

将{{1}的NAN替换为col_1的{​​{1}},并将mean的NAN替换为col_1的{​​{1}}。

现在,我必须分别为每列替换它。如果所有列都是数字列或分类列,那么这很容易,因为该操作可以应用于整个数据帧,但是我找不到一种方法来对混合数据帧进行一行处理。

2 个答案:

答案 0 :(得分:2)

mean仅适用于数字类型,因此请先填充该类型,然后再将其余部分填充为模式。

df.fillna(df.mean()).fillna(df.mode().iloc[0])

#   col_1 col_2
#0    3.0     a
#1    2.0     a
#2    1.0     a
#3    2.0     d

如果有平局,该模式将是最先排序的模式。

答案 1 :(得分:1)

我会做什么

df.fillna(df.agg(['mean',lambda x : x.value_counts().index[0]]).ffill().iloc[-1,:])
   col_1 col_2
0    3.0     a
1    2.0     a
2    1.0     a
3    2.0     d