Python 用列/序列中的值替换子字符串

Python 用列/序列中的值替换子字符串,python,pandas,Python,Pandas,我试图用Pandas列中的值替换Pandas子字符串。这个问题以前没有得到回答 我尝试使用.replace()方法,但它抛出以下错误: TypeError回溯(最近的调用 最后)在 ---->1 df['name'].str.replace('C'),df.name2) ~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/strings.py in 包装器(self,*args,**kwargs)1841)1842 raise Type

我试图用Pandas列中的值替换Pandas子字符串。这个问题以前没有得到回答

我尝试使用.replace()方法,但它抛出以下错误: TypeError回溯(最近的调用 最后)在 ---->1 df['name'].str.replace('C'),df.name2)

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/strings.py in 包装器(self,*args,**kwargs)1841)1842
raise TypeError(msg) ->1843返回func(self,*args,**kwargs)1844 1845包装器。name=func\u name

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/strings.py in 更换(self、pat、repl、n、case、flags、regex)2714 def 替换(self、pat、repl、n=-1、case=None、flags=0、regex=True):
2715结果=str_替换( ->2716 self._parent,pat,repl,n=n,case=case,flags=flags,regex=regex 2717)2718返回 自我包装结果(结果)

~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/strings.py in str_replace(arr、pat、repl、n、case、flags、regex) 597#检查repl是否有效(GH 13438、GH 15055) 598如果不是(类似字符串(repl)或可调用(repl)): -->599 raise TypeError(“repl必须是字符串或可调用”) 600 601 is_-compiled_-re=is_-re(pat)

TypeError:repl必须是字符串或可调用

预期结果:

    id  name    name2
0   1   name1 Jane  Jane
1   2   name2 Abbie Abbie
2   3   name3   Luke
3   4   name4   Peter

您需要python
re.sub
和listcomp

import re

df['new_name'] = [re.sub(r'\(\w+\)', r, s) for r, s in zip(df.name2, df.name)]

Out[280]:
   id       name  name2     new_name
0   1  name1 (C)   Jane   name1 Jane
1   2  name2 (B)  Abbie  name2 Abbie
2   3      name3   Luke        name3
3   4      name4  Peter        name4

谢谢有没有其他不使用正则表达式的解决方案?有。您可以使用
str.split
和条件替换并连接回。它要求您知道要替换的子字符串的确切位置(在您的示例中,它们是第二个单词),并且拆分并重新连接不是最佳选择。谢谢Andy。有道理。我将使用正则表达式
import re

df['new_name'] = [re.sub(r'\(\w+\)', r, s) for r, s in zip(df.name2, df.name)]

Out[280]:
   id       name  name2     new_name
0   1  name1 (C)   Jane   name1 Jane
1   2  name2 (B)  Abbie  name2 Abbie
2   3      name3   Luke        name3
3   4      name4  Peter        name4