如何用DataFrame另一列替换某列固定格式字符?解决TypeError报错
解决Pandas中用另一列内容替换指定格式字符的报错问题
问题背景
需要在Pandas的DataFrame中,用edit列的内容替换original列里符合<\w+/>格式的字符(比如<Isis/>)。例如将目标文本中的<Isis/>替换为twins,得到结果:
France is ‘ hunting down its citizens who joined twins ’ without trial in Iraq
但运行现有代码时触发错误:
TypeError: replace() argument 1 must be str, not None
错误原因
p.match(x['original'])返回的是**正则匹配对象(Match Object)**或None,而字符串的replace()方法第一个参数要求是字符串类型,类型不匹配导致报错。match()方法仅匹配字符串开头的内容,如果目标格式不在字符串开头,会直接返回None,同样引发错误。
修正方案
使用re.sub()方法直接处理正则替换,它可以识别正则模式并将匹配到的内容替换为指定值,同时兼容无匹配的场景。
修正后代码
import pandas as pd import re df = pd.read_csv('train.csv') # 定义匹配<\w+/>格式的正则模式 pattern = re.compile(r'<\w+/>') # 使用re.sub完成替换,无匹配时返回原字符串 df['original'] = df.apply( lambda x: pattern.sub(str(x['edit']), x['original']), axis=1 ) print(df.head())
代码说明
pattern.sub(repl, string)会在string中查找所有匹配pattern的内容,并用repl(即edit列的内容)替换。- 如果
original列中没有符合格式的字符,sub()会直接返回原字符串,避免报错。 - 用
str(x['edit'])确保替换值是字符串类型,防止edit列存在非字符串数据时出现问题。
内容的提问来源于stack exchange,提问作者abbyzhao
相关产品推荐
相关产品推荐

