微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 熊猫:难以填充空值

我正在使用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 举报,一经查实,本站将立刻删除。

相关推荐