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

如何从DataFrame中筛选第二个‘-’后含特定字符的行?

筛选第二个'-'后包含特定字符的DataFrame行

嘿,这个需求很典型,我给你分享几个简单又靠谱的实现思路,直接就能用:

方法1:拆分字符串后检查目标部分

先通过str.split把字符串按-拆分,只拆前两个分隔符(n=2),这样就能精准拿到第二个-之后的内容,再用str.contains判断是否包含目标字符(比如'E')。

示例代码:

import pandas as pd

# 假设你的DataFrame列名为'target_col'
filtered_df = df[df['target_col'].str.split('-', n=2).str[2].str.contains('E')]
  • 解释:str.split('-', n=2)会把字符串分成3部分(索引0、1、2),str[2]就是第二个-之后的所有内容;如果某行不足两个-,这部分会返回NaN,str.contains会自动忽略这些行,刚好符合我们的筛选逻辑。

方法2:用正则表达式直接匹配

如果数据量比较大,正则表达式的效率会更高,直接匹配“两个-之后包含E”的模式:

示例代码:

filtered_df = df[df['target_col'].str.contains(r'^[^-]+-[^-]+-.*E.*')]
  • 正则说明:
    • ^[^-]+-:匹配开头到第一个-的内容([^-]+表示任意非-的字符)
    • [^-]+-:匹配第一个-到第二个-的内容
    • .*E.*:匹配第二个-之后包含'E'的任意内容

额外技巧:忽略大小写匹配

如果需要不区分大小写(比如同时匹配'E'和'e'),只需要给str.contains加个参数:

# 方法1的写法
filtered_df = df[df['target_col'].str.split('-', n=2).str[2].str.contains('E', case=False)]

# 方法2的写法(正则里加忽略大小写标记)
filtered_df = df[df['target_col'].str.contains(r'^[^-]+-[^-]+-.*E.*', case=False)]

举个实际例子验证:
假设你的DataFrame是这样的:

data = {'target_col': ['A-B-C', 'X-Y-E', 'P-Q-R-e', 'L-M', 'S-T-U-V-E']}
df = pd.DataFrame(data)

用上面的方法筛选后,会得到包含X-Y-E、P-Q-R-e、S-T-U-V-E的行,完全符合需求。

内容的提问来源于stack exchange,提问作者user9118870

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:05:31