用 pandas str.replace 替换多个子字符串值

Posted

技术标签:

【中文标题】用 pandas str.replace 替换多个子字符串值【英文标题】:Replacing more than one substring value with pandas str.replace 【发布时间】:2020-01-09 05:19:33 【问题描述】:

我正在寻找一种方法来简化我的代码:

# Dataset
categorical_data = pd.Series(["dog", "lion", "cat", "crustacean", "dog", "insect", "insect", "cat", "crustacean"])

我想做的是用“动物”代替狗、狮子和猫。我可以这样写:

categorical_data = categorical_data.str.replace("dog", "animal")
categorical_data = categorical_data.str.replace("cat", "animal")
categorical_data = categorical_data.str.replace("lion", "animal")

str.replace() 函数有没有办法接受一个字符串列表而不是一个字符串?

例子:

categorical_data = categorical_data.str.replace([dog, lion, cat], "animal")

【问题讨论】:

【参考方案1】:

您可以改为使用带有str.replace 的正则表达式,将字符串分隔为与| 匹配,这将替换指定字符串中的任何 匹配项:

categorical_data.str.replace(r'(dog|cat|lion)', 'animal', regex=True)

0        animal
1        animal
2        animal
3    crustacean
4        animal
5        insect
6        insect
7        animal
8    crustacean
dtype: object

【讨论】:

【参考方案2】:

对于列表替换可以使用Series.replace:

categorical_data = categorical_data.replace(['dog', 'lion', 'cat'], "animal")    
print (categorical_data)
0        animal
1        animal
2        animal
3    crustacean
4        animal
5        insect
6        insect
7        animal
8    crustacean
dtype: object

答案之间的区别在于子字符串替换:

categorical_data = pd.Series(["dog gorilla", "lion", "cat", "crustacean"])

print (categorical_data.replace(['dog', 'lion', 'cat'], "animal"))
0    dog gorilla
1         animal
2         animal
3     crustacean
dtype: object

print (categorical_data.str.replace(r'(dog|cat|lion)', 'animal', regex=True))
0    animal gorilla
1            animal
2            animal
3        crustacean
dtype: object

【讨论】:

以上是关于用 pandas str.replace 替换多个子字符串值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas .str.replace 和不区分大小写

在js 中 replace 怎么不能替换中文?

js replace替换指定位置后面的字符串

js的replace如何全部替换目标字符串

用列/系列中的值替换熊猫子字符串

我想用js实现字符串的替换:用str=str.replace(str1,str2),要用到正则表示式。