【问题标题】:UnicodeDecodeError: 'ascii' codec, how to solve?UnicodeDecodeError: 'ascii' 编解码器,如何解决?
【发布时间】:2017-08-12 20:30:41
【问题描述】:

我正在尝试确保我的数据框 headlamp 中名为 Comment 的一列中存在任何字符串问题

原因是因为我稍后尝试使用.to_excel() 将数据框导出到excel,并且总是引发unicode错误。

我已经在网上阅读了很多资料,也在这里解决了这个问题,但是到目前为止我无法管理它。 我尝试使用encode() 来解决,如下面的代码,但是,我仍然遇到同样的问题。

headlamp = part_dataframe(ro, 'PN 3D', '921')
headlamp['Comment'] = headlamp.Comment.apply(lambda x: x.encode('ascii', 
'ignore'))
headlamp['word'] = headlamp.Comment.str.split().apply(lambda x: 
pd.value_counts(x).to_dict())
len(headlamp)

错误:

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-57-29454fde650e> in <module>()
  1 headlamp = part_dataframe(ro, 'PN 3D', '921')
----> 2 headlamp['Comment'] = headlamp.Comment.apply(lambda x: 
x.encode('ascii', 'ignore'))
  3 headlamp['word'] = headlamp.Comment.str.split().apply(lambda x: 
  4 pd.value_counts(x).to_dict())
  5 len(headlamp)

C:\Users\Rafael\Anaconda2\envs\gl-env\lib\site-
packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args, 
**kwds)
2218         else:
2219             values = self.asobject
-> 2220             mapped = lib.map_infer(values, f, convert=convert_dtype)
2221 
2222         if len(mapped) and isinstance(mapped[0], Series):

pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:62658)()

<ipython-input-57-29454fde650e> in <lambda>(x)
  1 headlamp = part_dataframe(ro, 'PN 3D', '921')
----> 2 headlamp['Comment'] = headlamp.Comment.apply(lambda x: 
x.encode('ascii', 'ignore'))
  3 headlamp['word'] = headlamp.Comment.str.split().apply(lambda x: 
  4 pd.value_counts(x).to_dict())
  5 len(headlamp)

 UnicodeDecodeError: 'ascii' codec can't decode byte 0xb4 in position 71: 
 ordinal not in range(128)

我完全迷失在这件事上,因此,任何帮助都将不胜感激。

我正在使用 Jupyter Ipython

【问题讨论】:

  • 这是 Python 2 吗?另外,请显示完整的回溯,以便我们查看在哪一行引发了异常。
  • 请注意,该异常与de编码有关,因此encode 方法本身并没有引发它。但是,如果这是 Python 2,则可能涉及隐式解码步骤(从 str 自动强制转换为 unicode)。
  • 我已经用完整的回溯更新了这个问题,关于你的 2 条评论,能否更好地解释一下?我的 python 是 2.7
  • 我不熟悉 pandas 的数据模型,但是你可以试试 lambda 表达式中的x.decode('latin-1').encode('ascii', 'ignore')。如果您不知道 strunicode 类型之间的区别,则需要阅读该主题或切换到 Python 3(您遇到此类问题的频率要低得多)。

标签: python encoding utf-8 decode


【解决方案1】:

0xb4 是反引号的 Unicode 字符:http://www.fileformat.info/info/unicode/char/00b4/index.htm

您的输入中似乎有一个非 ascii 字符。尝试将其编码为utf-8,看看是否有帮助。

如果你在 ascii 中仍然需要它,你可以试试这个解决方案:Convert a Unicode string to a string in Python (containing extra symbols)

【讨论】:

  • 谢谢你的帮助,没必要在ascii,我只是尝试不同的类型,看看哪个能解决。你的建议我都试过了,还是不行,你还有什么建议吗?提前谢谢你
  • 尝试使用我发送的其他堆栈溢出链接中的库,看看是否会出错!
  • 我已经尝试了该链接上的一些建议,但我无法使其工作。老实说,即使我做得对,我也不知道。你能帮我吗?,你将如何编写我在我的问题中写的代码,以便根据你的建议解决它
  • U+00B4 是重音符号,而不是反引号(它是 U+0060,包含在 ASCII 中)。
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2017-10-05
  • 2013-08-20
相关资源
最近更新 更多