熊猫:难以填补空值

时间:2018-01-26 17:42:31

标签: python pandas

我正在使用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

因此它正确处理AgeFare列,但Embarked仍然有两个空值。

有趣的是,当我跑步时:

combined_df.Embarked.value_counts()

我回来了:

S    914
C    270
Q    123
Name: Embarked, dtype: int64

这样就可以在Embarked中看到不是任何空值?

很困惑;有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

dropna=False传递给value_counts

combined_df.Embarked.value_counts(dropna=False)

答案 1 :(得分:2)

你不能使用mode返回的值来填充,因为它是一个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