如何在Pandas DataFrame中筛选包含指定名称的记录?——含"Abbott"姓名筛选的报错排查
在Pandas DataFrame中筛选包含"Abbott"的姓名
嘿,我来帮你搞定这个问题!先说说你遇到的报错原因:你写的df.loc[name in df["Name"]]之所以报错,是因为name in df["Name"]只会返回一个单一的布尔值——它是在检查整个Name列里是否存在某个精确匹配的值,而df.loc[]需要的是和DataFrame行数完全对应的布尔数组(每一行对应一个True/False,告诉Pandas哪些行要保留)。单个布尔值没法作为索引使用,所以就出现了那个错误提示。
接下来给你几个正确实现需求的方法:
方法1:使用str.contains()(最推荐)
这是处理“包含子串”筛选的标准方式,它会对Name列的每个元素逐一检查是否包含"Abbott",返回一个和列长度一致的布尔数组,刚好可以用来索引:
# 直接用布尔索引筛选 filtered_df = df[df["Name"].str.contains("Abbott")] # 或者用loc(效果一致,语义更明确) filtered_df = df.loc[df["Name"].str.contains("Abbott")]
运行这段代码后,filtered_df就会包含所有姓名中带有"Abbott"的行,也就是你示例里的第1、2行数据。
额外补充:如果需要精确匹配
要是你之后有精确匹配姓名的需求(比如找完全等于"Abbott, Mr. Rossmore Edward"的行),可以这么写:
filtered_df = df[df["Name"] == "Abbott, Mr. Rossmore Edward"]
不过这次你的需求是“包含”,所以str.contains()才是最贴合的选择。
内容的提问来源于stack exchange,提问作者Max Melichov
相关产品推荐
相关产品推荐

