泰坦尼克号数据集提取幸存男性乘客信息触发IndexingError报错
解决泰坦尼克号数据集筛选幸存男性乘客的IndexingError问题
报错原因分析
你写的代码触发IndexingError的核心问题是布尔索引与原DataFrame的索引不匹配:
titanic_train.iloc[np.where(titanic_train["Sex"] == 'male')]["Survived"] == 1得到的布尔Series,仅包含原数据中男性乘客的行(长度等于男性总人数),其索引是原数据里男性的位置下标;- 用这个短布尔Series去索引完整的
titanic_train(总长度为全体乘客数)时,pandas无法找到对应匹配的索引,因此抛出报错。
正确解决方案
推荐两种简单直接的写法,均可顺利提取幸存男性的姓名:
方案1:直接组合布尔条件(最简洁)
# 筛选出幸存的男性乘客 survived_males = titanic_train[(titanic_train["Sex"] == 'male') & (titanic_train["Survived"] == 1)] # 提取姓名列 survived_male_names = survived_males["Name"]
方案2:用np.where获取目标行索引
如果一定要用np.where,可以直接组合两个条件,一次性拿到所有符合要求的行下标:
import numpy as np # 获取所有幸存男性的行位置 target_indices = np.where((titanic_train["Sex"] == 'male') & (titanic_train["Survived"] == 1))[0] # 提取对应行的姓名 survived_male_names = titanic_train.iloc[target_indices]["Name"]
额外说明
尽量避免拆分条件分步筛选后再合并索引,这种做法容易出现索引对齐问题。pandas支持直接组合多个布尔条件,写法更简洁也更不容易出错。
内容的提问来源于stack exchange,提问作者Sameer Kulkarni
相关产品推荐
相关产品推荐

