python - Pandas 均值数据透视表包含 NaN 值,即使在聚合之前填充了数据
问题描述
我很难理解这个结果。
我正在使用来自 kaggle 的泰坦尼克号数据集,其中列出了泰坦尼克号的幸存者数据。“Cabin”列中的许多条目都是 NaN,所以我用虚拟变量“Z”填充这些条目。我只对 Cabin 字母感兴趣,所以我通过切片字符串的第一个字符来创建一个新列。然后我按“Sex”和“Cabin_letter”分组,并计算每个舱位中按性别划分的幸存者平均值。这是我的代码:
print(train["Cabin"].isnull().sum())
print(train["Sex"].isnull().sum())
print(train["Survived"].isnull().sum())
train["Cabin"].fillna(value="Z", inplace=True)
print(train["Cabin"].isnull().sum())
train["cabin_letter"] = train["Cabin"].str.slice(0,1)
print(train["cabin_letter"].isnull().sum())
train.pivot_table(values = 'Survived', index='Sex', columns='cabin_letter', aggfunc=np.mean)
women_T = train["cabin_letter"].loc[train["Sex"]=="female"]
print(women_T.isnull().any())
我正在打印每个系列中 NaN 值的总和,以确保它不是来自其他地方,并且替换按预期进行。只有 Cabin 列包含 NaN。这是输出:
687
0
0
0
0
cabin_letter A B C D E F G T Z
Sex
female 1.000000 1.0 0.888889 1.000000 0.933333 1.000 0.5 NaN 0.654378
male 0.428571 0.4 0.343750 0.466667 0.588235 0.375 NaN 0.0 0.136170
False
我可以看到替换正在工作,因为默认情况下没有“Z”值。为什么“G”和“T”列中有 NaN?
对于它的价值,我查看了与类似问题有关的其他 SO 帖子,例如:Pandas Dataframe nan values not replace
但我看过的似乎都没有解决这个问题。
任何帮助表示赞赏,谢谢。
解决方案
这表明没有对应于这些组合的值(即舱室 T 中没有女性或舱室 G 中没有男性)。
你应该能够确认train[train.Cabin == 'T'].Sex.value_counts()
这是一个玩具示例,用于说明遵循数据的形式:
dat = pd.DataFrame({'sex': list('mfmfmfm'),
'survived': [1, 0, 0, 1, 1, 0, 1],
'cabin': ['a', 'a', 'b', 'b', 'c', 'c', 'd']})
dat
dat.pivot_table(values = 'survived', index='sex', columns = 'cabin', aggfunc=np.mean)
推荐阅读
- javascript - Regular expression with conditionals in Javascript error -> Invalid regular expression
- pytest - 从 json 文件生成测试参数
- angular - 在 Angular 8 中,我应该将 Spring Boot 休息调用返回的数据定义为接口还是类?
- java - SunCertPathBuilderException; JAVA_OPTS with keystore required?
- javascript - How to make first li value 0 and then increment by 2 using css counter?
- json - Unexpected end of JSON input at undefined line XXXX, columns xx-xx while reading in BigQuery
- python - 使用python将图像保存到子目录中
- php - 如何在 PHP 中解析 Google Directions API Json,特别是嵌套的每个“Step”和“Leg”的距离值和持续时间值?
- python - PHP 执行的 Python 脚本忽略参数
- python - 如何将 100k 频率词表从 NLTK 存储到数据库