python unicode用空字符串替换反斜杠u

Posted

技术标签:

【中文标题】python unicode用空字符串替换反斜杠u【英文标题】:python unicode replace backslash u with an empty string 【发布时间】:2021-03-28 19:30:37 【问题描述】:

我正在清理一个 pandas 数据框,并遇到其中包含 u 的 unicode 字符串,其中包含一个反斜杠,而不是我需要替换的,例如

u'\u2014'.replace('\u','')
Result: u'\u2014'

我尝试将其编码为utf-8,然后对其进行解码,但这不起作用,我觉得必须有更简单的方法解决这个问题。

熊猫代码

merged['Rank World Bank'] = merged['Rank World Bank'].astype(str)

错误

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2014' in position 0: ordinal not in range(128)

【问题讨论】:

这不是消毒,这是不消毒。那样你会破坏数据。 '\u2014' 是一个破折号。为什么要删除它? 把列变成str 更新问题 在哪里? @InAFlash 【参考方案1】:

u'\u2014' 实际上是-。这不是一个数字。这是一个utf-8 字符。尝试使用 print 关键字来打印它。你会知道的

这是 ipython 中的输出:

In [4]: print("val = ", u'\u2014')
val =  —

根据您的评论,这是您做错的地方 “-”与“EM Dash”Unicode 字符不同(u'\u2014')

所以,你应该做以下事情

print(u'\u2014'.replace("\u2014",""))

这样就可以了

编辑: 由于您使用的是 python 2.x,因此您必须使用 utf-8 对其进行编码,如下所示

u'\u2014'.encode('utf-8').decode('utf-8').replace("-","")

【讨论】:

这同样糟糕,因为它看起来几乎不可能删除尾随字符。这个u'\u2014'.replace('—','') 抛出一个错误UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) 要注意“-”不等于u'\u2014' 您应该执行以下操作 u'\u2014'.replace("\u2014","") 你用的是python 2.x吗? @SamuelM。试试这个,它适用于 Python 2 和 3:s = u'em\u2014dash'; print(s); s=s.replace(u'—', ''); print(s)【参考方案2】:

是的,因为它将 '2014' 后跟 '\u' 作为 unicode 字符串而不是字符串文字。

有帮助的事情:

使用 .encode('ascii', 'ignore') 转换为 ascii 当您使用 pandas 时,您可以使用“encoding”参数并在那里传递“ascii”。 改为:u'\u2014'.replace(u'\u2014', u'2014').encode('ascii', 'ignore')

希望这会有所帮助。

【讨论】:

以上是关于python unicode用空字符串替换反斜杠u的主要内容,如果未能解决你的问题,请参考以下文章

python字符前面u,r,f等含义

Python 3.6,utf-8 到 unicode 的转换,带双反斜杠的字符串

Python 字符串前面加u,r,b,f的含义

如何将反斜杠替换为字符串Python中的不同字符

python urlencode() 反斜杠处理问题

目标 C:用单反斜杠替换双反斜杠