用一个新字符串替换一个以上的旧字符串值str.replace

Mak*_*aku 5 python list python-3.x pandas

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

资料集:

categorical_data = pd.Series(["dog", "lion", "cat", "crustacean", "dog", "insect", "insect", "cat", "crustacean"])
Run Code Online (Sandbox Code Playgroud)

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

categorical_data = categorical_data.str.replace("dog", "animal")
categorical_data = categorical_data.str.replace("cat", "animal")
categorical_data = categorical_data.str.replace("lion", "animal")
Run Code Online (Sandbox Code Playgroud)

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

例:

categorical_data = categorical_data.str.replace([dog, lion, cat], "animal")
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 3

要替换为列表,可以使用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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)