Python Pandas 替换特殊字符

5

由于某些原因,我无法在 ñ 上使这个简单的语句起作用。它似乎可以在其他任何字符上正常工作,但不喜欢这个字符。有什么想法吗?

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

谢谢


1
代码返回什么?它会导致错误还是只是未能替换字符而没有抛出错误? - Blaszard
这对我似乎有效。你确定它是相同的字符(具有相同的 Unicode 代码点)吗?它可能只是看起来相同... - Andy Hayden
2个回答

8
我假设您在使用Python 2.x,并且这很可能是一个Unicode问题。不用担心,您并不孤单——总的来说,在Python 2中特别是Unicode非常棘手,这就是为什么在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编码。

2
这个问题涉及到pandas。str.replace是一个Series方法。虽然,我怀疑你提供的替代代码也是正确的。 - Andy Hayden
好的观点。谢谢你指出这一点;我之前没有意识到。我假设.str返回字符串。 - jdotjdot
另一个更新无效。替换值必须像 u'\xc9' 一样。 - Tjorriemorrie

0

您可以使用替换函数将特殊字符替换为您选择的不同值,方法如下:

如果您的数据框是df,并且您必须在所有字符串列中执行此操作。在我的情况下,我正在针对“\n”执行此操作。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接