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

如何删除Pandas DataFrame中case_id列第三个连字符及之后的内容

方案1:字符串拆分拼接(可读性高,易理解)

直接按-拆分字符串后取前3段重新拼接即可,代码如下:

# 拆分后取前3个片段,再用-拼接
df['case_id'] = df['case_id'].str.split('-', n=3).str[:3].str.join('-')

说明:split方法加n=3参数限制最多拆分3次,避免不必要的性能损耗,即使字符串中-数量多于3个也能正常处理。


方案2:正则替换(性能更优)

通过正则匹配直接替换第三个-及之后的所有内容为空:

df['case_id'] = df['case_id'].str.replace(r'^((?:[^-]+-){2}[^-]+)-.*$', r'\1', regex=True)

正则说明:捕获组((?:[^-]+-){2}[^-]+)匹配前三个由-分隔的片段,后续-.*匹配第三个-及之后的全部内容,最终替换为捕获组的内容即可得到目标结果。


测试验证

你可以用以下代码构造示例数据验证效果:

import pandas as pd

# 构造示例数据
data = {
    'case_id': ['TCGA-3A-01-03-9441', 'TCGA-9C-01-04-9641', 'TCGA-1E-01-05-9471'],
    'unit': [27, 15, 6]
}
df = pd.DataFrame(data)

# 执行处理(用上述任意一种方案即可)
df['case_id'] = df['case_id'].str.split('-', n=3).str[:3].str.join('-')

# 输出结果
print(df)

运行后输出结果和期望的完全一致:

case_id  unit
0  TCGA-3A-01    27
1  TCGA-9C-01    15
2  TCGA-1E-01     6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:02