如何基于(pp)拆分DataFrame中带括号的字符串为两列?
如何按(pp)拆分CSV中的Name列
先看你的原始数据:
Name Combined Score NDUFAF7 (pp) TRMT10C 0.911 NDUFAF7 (pp) PPARGC1A 0.846
你之前的两种写法都存在问题:
- 第一种用
\s+\(.*$拆分,这个正则会把(pp)及后面所有内容全匹配掉,自然只能拿到前面的部分。 - 第二种用
(pp)拆分,一是括号在正则里属于捕获组,split后会把(pp)也作为结果的一项;二是你CSV里的列名是Name(首字母大写),代码里写的df['name']大小写不匹配,直接触发错误。
正确实现代码
import pandas as pd # 读取CSV,因为是空格分隔,用delim_whitespace=True自动处理多空格 df = pd.read_csv('your_file.csv', delim_whitespace=True) # 拆分Name列:匹配(pp)前后的空白,拆分出两列 df[['preferredName_A', 'preferredName_B']] = df['Name'].str.split(r'\s*\(pp\)\s*', expand=True) # 查看结果 print(df)
关键说明
- 正则
r'\s*\(pp\)\s*':\(pp\)转义括号,因为括号是正则特殊字符,必须转义才能匹配字面的(pp)\s*匹配0或多个空格,自动处理(pp)前后的空格,保证拆分后的列内容干净
- 必须用
df['Name']而非df['name'],和CSV里的列名大小写保持一致 expand=True参数让split结果直接展开成两列,无需额外处理
执行后会得到符合预期的结果:
| Name | Combined Score | preferredName_A | preferredName_B |
|---|---|---|---|
| NDUFAF7 (pp) TRMT10C | 0.911 | NDUFAF7 | TRMT10C |
| NDUFAF7 (pp) PPARGC1A | 0.846 | NDUFAF7 | PPARGC1A |
内容的提问来源于stack exchange,提问作者Yik Chuan Low
相关产品推荐
相关产品推荐

