处理人口普查数据时,我想用这两列各自的模式替换两列(“workclass”和“native-country”)中的 NaN。我可以轻松获得这些模式:
mode = df.filter(["workclass", "native-country"]).mode()
它返回一个数据框:
workclass native-country
0 Private United-States
但是,
df.filter(["workclass", "native-country"]).fillna(mode)
不会用任何东西替换每列中的 NaN,更不用说与该列对应的模式了。有没有一种流畅的方法可以做到这一点?
最佳答案
如果你想在数据帧 df
的某些列中用 mode
填充缺失值,你可以只 fillna
由 Series
创建,由 iloc
的位置选择:
cols = ["workclass", "native-country"]
df[cols]=df[cols].fillna(df.mode().iloc[0])
或者:
df[cols]=df[cols].fillna(mode.iloc[0])
您的解决方案:
df[cols]=df.filter(cols).fillna(mode.iloc[0])
示例:
df = pd.DataFrame({'workclass':['Private','Private',np.nan, 'another', np.nan],
'native-country':['United-States',np.nan,'Canada',np.nan,'United-States'],
'col':[2,3,7,8,9]})
print (df)
col native-country workclass
0 2 United-States Private
1 3 NaN Private
2 7 Canada NaN
3 8 NaN another
4 9 United-States NaN
mode = df.filter(["workclass", "native-country"]).mode()
print (mode)
workclass native-country
0 Private United-States
cols = ["workclass", "native-country"]
df[cols]=df[cols].fillna(df.mode().iloc[0])
print (df)
col native-country workclass
0 2 United-States Private
1 3 United-States Private
2 7 Canada Private
3 8 United-States another
4 9 United-States Private
关于python - 具有每列模式的多列 Pandas Fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870536/