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的主要内容,如果未能解决你的问题,请参考以下文章