根据文档,fillna
value
参数可以是以下之一:
value : scalar, dict, Series, or DataFrame
Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). (values not in the dict/Series/DataFrame will not be filled). This value cannot be a list.
我的数据框看起来像:
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S
这就是我想要做的事情:
因此,经过一些数据操作后,我得到了这个数据框:
Pclass Cabin Embarked Ticket
0 1 C S 50
1 2 F S 13
2 3 G S 5
对于Pclass == 1
,最常见的Cabin
是C
。鉴于此,在我的原始数据框df
中,我想用df['Cabin'] == null
填充每个C
。
这是一个小例子,我可以手工处理每个可能的空组合:
df_both[df_both['Pclass'] == 1 & df_both['Cabin'] == np.NaN] = 'C'
但是,我想知道我是否可以使用这个派生数据框来自动完成所有这些填充。
谢谢。
答案 0 :(得分:0)
如果您想用特定列的中位数或平均值填充所有Nan,您可以执行以下操作。
表示中位数:
df.fillna(df.median())
表示平均值
df.fillna(df.mean())
有关详细信息,请参阅https://pandas.pydata.org/pandas-docs/stable/missing_data.html#filling-with-a-pandasobject。
编辑:
或者,您可以使用具有指定值的字典。键需要映射到列名称。这样你也可以在字符串中输入缺失的值。
df.fillna({'col1':'a','col2': 1})