You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:47:52