我正在使用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
中看到不是任何空值?
很困惑;有什么建议吗?
谢谢!
答案 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