我知道如何选择所有带有平均值的数字列和fillna,但是如何使带有平均值的数字列fillna和具有模式的字符列fillna?

最佳答案

select_dtypes列中的numeric列使用mean,然后通过differencemode获得非数值,通过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/

10-13 00:03