如何删除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
相关产品推荐
相关产品推荐

