我知道如何选择所有带有平均值的数字列和fillna,但是如何使带有平均值的数字列fillna和具有模式的字符列fillna?
最佳答案
对select_dtypes
列中的numeric
列使用mean
,然后通过difference
和mode
获得非数值,通过append
联接在一起,最后调用fillna
:
注意:(感谢@jpp)
函数mode
应该返回多个值,对于第一次添加iloc
df = pd.DataFrame({
'A':list('ebcded'),
'B':[np.nan,np.nan,4,5,5,4],
'C':[7,np.nan,9,4,2,3],
'D':[1,3,5,np.nan,1,0],
'F':list('aaabbb')
})
df.loc[[0,1], 'F'] = np.nan
df.loc[[2,1], 'A'] = np.nan
print (df)
A B C D F
0 e NaN 7.0 1.0 NaN
1 NaN NaN NaN 3.0 NaN
2 NaN 4.0 9.0 5.0 a
3 d 5.0 4.0 NaN b
4 e 5.0 2.0 1.0 b
5 d 4.0 3.0 0.0 b
a = df.select_dtypes(np.number).mean()
b = df[df.columns.difference(a.index)].mode().iloc[0]
#alternative
#b = df.select_dtypes(object).mode().iloc[0]
print (df[df.columns.difference(a.index)].mode())
A F
0 d b
1 e NaN
df = df.fillna(a.append(b))
print (df)
A B C D F
0 e 4.5 7.0 1.0 b
1 d 4.5 5.0 3.0 b
2 d 4.0 9.0 5.0 a
3 d 5.0 4.0 2.0 b
4 e 5.0 2.0 1.0 b
5 d 4.0 3.0 0.0 b
关于python - pandas:具有平均值的数字列fillna和具有模式的字符列fillna,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53612507/