python要替换的字符串不等于值?

python要替换的字符串不等于值?,python,pandas,replace,Python,Pandas,Replace,我理解替换列中的字符串只需执行以下操作: df['surf'].replace(to_replace='Grass', value='Turf') 这将在我的列中将“Grass”的所有值替换为“turp”。但我想要相反的结果。我试着用!=或者~,但还没有实现 如果我想用“草皮”替换所有不是“草”的值,该怎么办 编辑:我应该添加,我可以使用: df.loc[df['surf'] != 'Grass', 'surf'] = 'Turf' 但我想知道是否有办法使用.replace您可以使用负前瞻和

我理解替换列中的字符串只需执行以下操作:

df['surf'].replace(to_replace='Grass', value='Turf')
这将在我的列中将“Grass”的所有值替换为“turp”。但我想要相反的结果。我试着用!=或者~,但还没有实现

如果我想用“草皮”替换所有不是“草”的值,该怎么办

编辑:我应该添加,我可以使用:

df.loc[df['surf'] != 'Grass', 'surf'] = 'Turf'

但我想知道是否有办法使用
.replace

您可以使用负前瞻和正则表达式模式来执行您想要的操作:

df['surf'] = df['surf'].replace(to_replace=r"^(.(?<!Grass))*?$", value='Turf',regex=True)

@crenbaerry93,试图在评论中回答,但这里可能比评论中更容易阅读:

我认为这是相同的想法,但您只需添加第二个
.replace()


根据,to_replace可以是正则表达式。@COLDSPEED谢谢,编辑得很好。设置
inplace=True,
是否比重新分配给
df['surf']
更好?(你告诉我,不是熊猫专家)。另外,这里不需要原始前缀,正则表达式中没有反斜杠。没问题。此外,如果设置是针对整个数据帧,则设置
inplace=True
也会起作用。当您对列进行切片时,事情会变得不确定(这可能会起作用,也可能不会起作用,这取决于切片是返回视图还是副本-我不确定每一个列发生时的确切实例,但您明白这一点)。所以,最好还是稳妥一点,重新分配。我应该在这里提到,即使它有效,
inplace=True
也不会带来任何性能提升。仍会创建副本,但会分配回原始副本,因此不必显式地声明重新分配。一种方便的功能。(嘘,我没有得到你的ping,你需要使用@c。)ᴏʟᴅsᴘᴇᴇᴅ :p) 我想是的。但是很难做到那些小写大写的东西。谢谢你的精确性。正如我所说,我不是熊猫专家,我几乎从不回答熊猫的问题,但这个问题一直摆在我面前,所以,
c
是纯ascii码,所以你可以键入“@c”,然后完成我名字的其余部分!(我认为应该有效)
df['surf'] = df['surf'].str.replace(r"^(.(?<!Grass))*?$", "Turf")
>>>words = ['Grass', 'abc', 'xyz'] 
['Grass', 'abc', 'xyz'] 

>>>replaced = [w.replace('Grass', 'Turf').replace('abc', 'Turf') for w in words]
['Turf', 'Turf', 'xyz']