如何使用Pandas实现序列指定位置字符的识别与替换
基于Pandas的特定位置字符替换实现方案
实现逻辑说明
- 先解析变异标识列(第二列)的格式:如
R11W可拆解为原字符R、1-based位置11、目标替换字符W - 序列字符串在Python中为0-based索引,因此需要将解析出的位置减1后再做匹配
- 匹配规则:序列对应位置字符与拆解出的原字符一致时执行替换,否则返回NaN
完整实现代码
import pandas as pd import re # 1. 读取输入数据,分隔符设为任意空白字符适配你的输入格式 df = pd.read_csv('input.txt', sep='\s+', names=['gene', 'mut_tag', 'sequence'], header=0) def replace_sequence(row): # 正则拆解变异标识的三个部分 match_res = re.match(r'([A-Z])(\d+)([A-Z])', row['mut_tag']) if not match_res: return pd.NA orig_char, pos_str, target_char = match_res.groups() pos = int(pos_str) - 1 # 转为0-based索引 # 校验位置合法性 + 字符匹配 if pos >= len(row['sequence']) or row['sequence'][pos] != orig_char: return pd.NA # 执行指定位置字符替换 return row['sequence'][:pos] + target_char + row['sequence'][pos+1:] # 2. 逐行处理生成新的序列列 df['sequence'] = df.apply(replace_sequence, axis=1) # 可选:将pd.NA转为你需要的NaN字符串显示 df = df.fillna('NaN') # 3. 输出结果,也可调用df.to_csv()保存为文件 print(df.to_string(index=False))
输出验证
运行上述代码后输出结果与你给出的预期输出完全一致:
gene mut_tag sequence TNN R11W MSLQEMFRFPWGLLLGSVLLVASAPATL ASTN1 E5V NaN HSPB7 H19P MSHRTSSTFRAERSFHSSPSSSSSSTSSSASRALPAQDPPMEK CLCNKB C3Y MEYFVGLREGSSGNPVTLQELWGPCPRIRRGIRG SZRD1 P10L NaN
内容的提问来源于stack exchange,提问作者LoganLee
相关产品推荐
相关产品推荐

