我试图用pandas列中的值替换Pandas子字符串。之前尚未回答过这个问题。
TypeError跟踪(最近的呼叫 最后) ----> 1 df ['name']。str.replace('(C)',df.name2)
〜/ opt / anaconda3 / lib / python3.7 / site-packages / pandas / core / strings.py在 包装器(自己,* args,** kwargs)1841)1842
引发TypeError(msg) -> 1843 return func(self,* args,** kwargs)1844 1845包装器。名称 = func_name〜/ opt / anaconda3 / lib / python3.7 / site-packages / pandas / core / strings.py在 替换(self,pat,repl,n,case,flags,regex)2714 def replace(self,pat,repl,n = -1,case = None,flags = 0,regex = True):
2715.结果= str_replace( -> 2716 self._parent,pat,repl,n = n,case = case,flags = flags,regex = regex 2717)2718返回 self._wrap_result(result)〜/ opt / anaconda3 / lib / python3.7 / site-packages / pandas / core / strings.py在 str_replace(arr,pat,repl,n,case,flags,regex) 597#检查repl是否有效(GH 13438,GH 15055) 598如果不是(is_string_like(repl)或callable(repl)): -> 599提高TypeError(“ repl必须是字符串或可调用”) 600 601 is_compiled_re = is_re(pat)
TypeError:repl必须为字符串或可调用
data = {'id': [1, 2, 3, 4], 'name': ['name1 (C)', 'name2 (B)', 'name3', 'name4'],
'name2':['Jane','Abbie','Luke','Peter']}
df = pd.DataFrame(data)
df['name'].str.replace('\(C\)', df.name2)
预期结果:
id name name2
0 1 name1 Jane Jane
1 2 name2 Abbie Abbie
2 3 name3 Luke
3 4 name4 Peter
答案 0 :(得分:0)
您需要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