我正在使用Kaggle Titanic dataset并尝试填充空值.运行这个:
combined_df.isnull().sum()
告诉我这个:
Age 263
Embarked 2
fare 1
Parch 0
PassengerId 0
Pclass 0
Sex 0
SibSp 0
Survived 418
fam_size 0
Title 0
dtype: int64
所以我执行以下操作来填充空值:
combined_df.Age.fillna(combined_df.Age.mean(), inplace=True)
combined_df.Embarked.fillna(combined_df.Embarked.mode(), inplace=True)
combined_df.fare.fillna(combined_df.fare.mean(), inplace=True)
所以当我现在运行时:
combined_df.isnull().sum()
我明白了:
Age 0
Embarked 2
fare 0
Parch 0
PassengerId 0
Pclass 0
Sex 0
SibSp 0
Survived 418
fam_size 0
Title 0
dtype: int64
因此它正确处理Age和fare列,但是Embarked仍然有两个空值.
有趣的是,当我跑:
combined_df.Embarked.value_counts()
我回来了:
S 914
C 270
Q 123
Name: Embarked, dtype: int64
这样看起来似乎在Embarked中没有任何空值?
非常困惑;有什么建议?
谢谢!
解决方法:
您不能使用模式返回的值来填充,因为它是一个Series对象(您可以,但这表示要填充哪些索引).而是使用第一个条目(可能有一个平局).
df = pd.DataFrame({'Emb': ['S', 'Q', 'C', np.nan, 'Q', None]})
df
Emb
0 S
1 Q
2 C
3 NaN
4 Q
5 None
df.fillna(df.Emb.mode())
Emb
0 S
1 Q
2 C
3 NaN
4 Q
5 None
df.fillna(df.Emb.mode()[0])
Emb
0 S
1 Q
2 C
3 Q
4 Q
5 Q
有关更多说明:
mode = df.Emb.mode()
mode
0 Q
dtype: object
0 S
1 Q
2 C
3 NaN
4 Q
5 NaN
Name: Emb, dtype: object
mode.index = [5]
5 Q
dtype: object
df.Emb.fillna(mode)
0 S
1 Q
2 C
3 NaN
4 Q
5 Q
Name: Emb, dtype: object
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。