【问题标题】:python unicode replace backslash u with an empty stringpython unicode用空字符串替换反斜杠u
【发布时间】: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

标签: python


【解决方案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')

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2011-08-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2011-02-22
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多