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