是否可以同时替换分类列和数字列中的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}}。
现在,我必须分别为每列替换它。如果所有列都是数字列或分类列,那么这很容易,因为该操作可以应用于整个数据帧,但是我找不到一种方法来对混合数据帧进行一行处理。
答案 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