如何在Pandas中筛选匹配字符串片段的行?
解决Pandas中筛选包含指定字符串片段的行的问题
嘿,这个坑我之前踩过!你用fund_data.loc[fund_data['SubVertical']=="%Data%"]没效果是因为Pandas不支持SQL里的%通配符写法——这里的%会被当成普通字符,自然匹配不到包含"Data"的行。
要实现包含指定字符串片段的筛选,Pandas有专门的字符串方法可以用,下面是几种实用的实现方式:
1. 基础用法:str.contains()
这是最常用的方法,直接对目标列调用str.contains(),传入要匹配的字符串即可:
# 筛选SubVertical列中包含"Data"的所有行 filtered_data = fund_data.loc[fund_data['SubVertical'].str.contains('Data')]
针对你给出的示例数据,运行这段代码后会返回行1(A Data Analysis)和行2(B Data Analytics),完全符合预期。
2. 进阶参数优化
忽略大小写匹配
如果需要不区分大小写(比如同时匹配"data"、"DATA"),可以加上case=False参数:
fund_data.loc[fund_data['SubVertical'].str.contains('data', case=False)]
处理空值(NaN)
如果你的SubVertical列存在空值(NaN),str.contains()会对这些行返回NaN,导致筛选结果包含无效值。可以用na=False把空值标记为不匹配:
fund_data.loc[fund_data['SubVertical'].str.contains('Data', na=False)]
匹配字面量特殊字符
如果要匹配的字符串里有正则特殊字符(比如.、*),可以加上regex=False,让方法按字面量匹配:
# 匹配包含"Data."的行,而不是"Data"加任意字符 fund_data.loc[fund_data['SubVertical'].str.contains('Data.', regex=False)]
为什么原来的写法不行?
再啰嗦一句:==是精确匹配,只有当列值和右边的字符串完全一致时才会返回True。你写的"%Data%"是一个完整的字符串,只有当SubVertical列的某个值正好是%Data%时才会被选中,这显然不是你想要的效果。
内容的提问来源于stack exchange,提问作者noswear
相关产品推荐
相关产品推荐

