python - 使用字典替换pandas数据框中的字符串而不覆盖

标签 python regex pandas dictionary

我正在尝试使用填充有如下值的列来转换 pandas 数据框:

df['Alteration']

Q79K,E17K
Q79K,E17K
T315I

并且希望将单字母氨基酸转换为其三字母代码,使其看起来更像这样:

Gln79Lys,Glu17Lys
Gln79Lys,Glu17Lys
Thr315Ile

到目前为止,我已经尝试使用使用正则表达式作为键的字典,如下所示:

AA_code = {re.compile('[C]'): 'Cys',re.compile('[D]'): 'Asp', 
re.compile('[S]'): 'Ser',re.compile('[Q]'): 'Gln',re.compile('[K]'): 'Lys', 
re.compile('[I]'): 'Ile',re.compile('[P]'): 'Pro',re.compile('[T]'): 'Thr', 
re.compile('[F]'): 'Phe',re.compile('[N]'): 'Asn',re.compile('[G]'): 'Gly', 
re.compile('[H]'): 'His',re.compile('[L]'): 'Leu',re.compile('[R]'): 'Arg', 
re.compile('[W]'): 'Trp',re.compile('[A]'): 'Ala',re.compile('[V]'): 'Val', 
re.compile('[E]'): 'Glu',re.compile('[Y]'): 'Tyr',re.compile('[M]'): 'Met'}

并根据字典替换以下代码:

df['Replacement'] = dfx2['Alteration'].replace(AA_code, regex=True)

但是,我遇到了一些奇怪的行为,其中替换函数覆盖了值,看起来更像这样:

Glyln79Leuys,Glu17Leuys
Glyln79Leuys,Glu17Leuys
Thr315Ile

据我了解, Glyln 源自首先将 Q 更改为 Gln 的代码,然后 Gln 中的 G 被 G 覆盖: Gly 键:字典中用于获取 Glyln 的值对。有什么办法可以解决这个问题吗?

谢谢!!

最佳答案

创建一个查找表,然后在Series.str.replace中的可调用中使用它,例如:

import pandas as pd

lookup = {
    'Q': 'Gln',
    'K': 'Lys',
    'E': 'Glu',
    'G': 'Gly'
    # needs completing...
}

s = pd.Series(['Q79K,E17K', 'Q79K,E17K', 'T315I'])
s.str.replace('([{}])'.format(''.join(lookup)), lambda m: lookup[m.group(1)])

给你:

0    Gln79Lys,Glu17Lys
1    Gln79Lys,Glu17Lys
2                T315I

关于python - 使用字典替换pandas数据框中的字符串而不覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51917483/

相关文章:

python - 是否可以在 Python 中返回实际代码?

python - cherrypy动态添加对象

ruby - 在 ruby​​ 中从字符串中解析 token 的更清晰的方法

sql - 如何通过在连接子句中使用子字符串函数在 Big Query 中执行两个表之间的连接

python - 属性错误 : (Class) object has no attribute '__name__' Creating ModelForms [Django & Python2. 7]

python - 无法在服务器上安装tensorflow

regex - Perl 正则表达式 : remove everything (including line breaks) until a match is found

pandas - 将 Pandas 列拆分为多列

python - 如何根据小时标准获得每天每组的最小值

python - 如何根据从网站上抓取的数据创建数据框?