Python Pandas 替换特殊字符

5 投票
2 回答
16658 浏览
提问于 2025-04-18 07:27

不知道为什么,我这个简单的语句在ñ这个字符上不管用。其他字符都没问题,就是不喜欢这个字符。有什么想法吗?

DF['NAME']=DF['NAME'].str.replace("ñ","n")

谢谢

2 个回答

0

你可以使用替换函数,把特殊字符换成你想要的其他值,方法如下。

假设你的数据框叫做 df,你需要在所有字符串类型的列中进行替换。比如在我的例子中,我要替换的是 "\n"。

df= df.applymap(lambda x: x.replace("\n"," "))
8

我猜你在使用Python 2.x,这可能是个Unicode的问题。别担心,你并不是一个人——Unicode确实很麻烦,尤其是在Python 2中,这也是为什么Python 3把它变成了标准。

如果你只关心ñ这个字符,你应该用UTF-8解码,然后只需要替换这个字符。

这看起来大概是这样的:

DF['name'] = DF['name'].str.decode('utf-8').replace(u'\xf1', 'n')

举个例子:

>>> "sureño".decode("utf-8").replace(u"\xf1", "n")
u'sureno'

如果你的字符串已经是Unicode格式,那你可以(实际上也必须)跳过decode这一步:

>>> u"sureño".replace(u"\xf1", "n")
u'sureno'

这里要注意的是,u'\xf1'使用了一个叫做十六进制转义的方式来表示这个字符。

更新

在评论中有人告诉我,<>.str.replace是pandas系列的方法,我之前没意识到这一点。这个问题的答案可能是这样的:

DF['name'] = map(lambda x: x.decode('utf-8').replace(u'\xf1', 'n'), DF['name'].str)

或者类似的,如果那个pandas对象是可迭代的。

另一个更新

我突然想到,你的问题可能简单得多,如下所示:

DF['NAME']=DF['NAME'].str.replace(u"ñ","n")

注意我在字符串前面加了u,这样它就变成了Unicode。

撰写回答