【问题标题】:Print pandas dataframe with spyder in unicode format使用 spyder 以 unicode 格式打印 pandas 数据帧
【发布时间】:2015-03-01 13:38:36
【问题描述】:

我正在使用 Spyder 2.3.2 和 Python 2.7.9

我在将数据帧打印到控制台时遇到问题。

考虑这个例子

import pandas as pd
x = pd.DataFrame([u'\xa0'])
x.iloc[0,0]

这在控制台中显示 u'\xa0' 很好。

但是当我尝试这样做时

x

print(x)

我在 spyder 的内部控制台中收到此错误

"return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 8:
invalid start byte"

我的理解是,发生这种情况是因为在打印整个数据帧时,spyder 以某种方式尝试解码来自 utf8 的字符,在这种情况下它无法做到。

有没有办法以 unicode 格式打印所有内容,而不是自动 utf8 解码?

如果有人能解释这里到底发生了什么,或许可以帮助我在更高层次上解决问题,我也将不胜感激。

【问题讨论】:

  • pd.__version__str(x)unicode(x) 显示什么?
  • pd.__version__ : 0.15.2 unicode(x) 和 str(x) 不会引发错误,在这种情况下它们会显示 '0\n0 \xa0'。但这很容易变得混乱。我想以某种方式将数据框整齐地打印在列中,就像任何其他数据框一样,但如果某个单元格中有一个字符串,那么它将显示为 unicode。
  • 其实我想我现在明白这个问题了。当我执行 print(x) 时,Python 只是将我在执行 str(x) 时在控制台中看到的内容转储出来。然后控制台将这些东西转换为整齐的行和列,现在如果某个变量包含一些不能用 utf8 处理的东西,那么我会得到一个错误。
  • 这很有趣,因为我也在使用熊猫版本0.15.2,但对我来说str(x)' 0\n0 \xc2\xa0'。注意'\xc2'。我的字符串使用utf8 正确解码。
  • 嗯这很奇怪。

标签: python printing pandas spyder


【解决方案1】:

更新:此问题将在 Spyder 2.3.3 中修复。 (谢谢,卡洛斯科尔多瓦。)


Pandas 使用pd.options.display.encoding 指定的编解码器对控制台上显示的 unicode 进行编码。 (在 IPython 中输入 print(pd.get_option.__doc__)pd.get_option? 以查看可配置选项的完整列表)。

根据 cmets,不知何故 pd.options.display.encoding 已设置为 'cp1252',但控制台需要 'utf-8'

因此,pandas 转换 str(x)' 0\n0 \xa0',但控制台使用utf-8 解码此字符串 结果为UnicodeDecodeError

解决办法是重置显示编码:

pd.options.display.encoding = 'utf-8'

因为这是控制台期望的编码。

【讨论】:

  • (Spyder dev here) @unutbu 感谢您的解决方案。我发现我们在创建控制台时过早地导入了 Pandas,这导致它错误地检测到控制台编码。您能否更新答案以提及此问题将在 Spyder 2.3.3 中修复并删除提及 PYTHONSTARTUP 以及所有其他内容?
猜你喜欢
  • 2020-01-26
  • 2017-03-10
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2021-04-26
  • 2022-07-28
  • 1970-01-01
相关资源
最近更新 更多