Python Pandas 替换特殊字符
不知道为什么,我这个简单的语句在ñ
这个字符上不管用。其他字符都没问题,就是不喜欢这个字符。有什么想法吗?
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。