Python如何从DataFrame的INFO列提取|HIGH|后所有基因名存入新列
解决方案
原有代码错误原因
- 循环内错误将整个DataFrame覆盖为
df['INFO']列,丢失原始数据结构,无法新增GENE列 - 使用
re.search仅能提取第一个匹配结果,无法获取同一行内的所有符合要求的基因名 - 存在变量名拼写错误:
susbtring和定义的substring不一致 - 循环内直接对
df['GENE']整列赋值,会导致所有行的结果被最后一次计算结果覆盖
正确实现代码
无需手动写for循环,用pandas向量化方法处理,效率更高,适合大规模数据集:
import pandas as pd import re # 匹配规则:|HIGH|之后、下一个|之前的所有字符 pattern = r"\|HIGH\|([^|]+)\|" # 提取所有匹配结果存入新列,每行结果为列表格式 df['GENE'] = df['INFO'].str.findall(pattern) # 若需要将同一行多个基因用逗号拼接为字符串,可追加以下代码 # df['GENE'] = df['GENE'].str.join(',')
逻辑说明
- 正则规则用
[^|]+匹配所有非|的字符,兼容含横杠、点等特殊字符的基因名,比\w+适用场景更广 str.findall会自动提取每行所有符合规则的匹配项,无匹配结果的行对应值为空列表- 向量化运算比手动遍历for循环性能高数十倍,适合处理含数千列、大量行的数据集
内容的提问来源于stack exchange,提问作者CarBroke
相关产品推荐
相关产品推荐

