如何打印包含一些俄语的熊猫数据框

Posted

技术标签:

【中文标题】如何打印包含一些俄语的熊猫数据框【英文标题】:How to print pandas dataframe containing some russian language 【发布时间】:2014-09-13 16:14:54 【问题描述】:

我正在处理以下类型的数据。

itemid 类别子类别标题 1 10000010 Транспорт Автомобили с пробегом Toyota Sera, 1991 2 10000025 Услуги Предложения услуг Монтаж кровли 3 10000094 Личные вещи Одежда, обувь, аксессуары Костюм Steilmann 4 10000101 Транспорт Автомобили с пробегом 福特福克斯,2011 5 10000132 Транспорт Запчасти и аксессуары Турбина 3.0 酒吧 6 10000152 Транспорт Автомобили с пробегом ВАЗ 2115 萨马拉, 2005

现在我运行以下命令

将熊猫导入为 pd trainingData = pd.read_table("train.tsv",nrows=10, header=0,encoding='utf-8') trainingData['itemid'].head() 0 10000010 1 10000025 2 10000094 3 10000101 4 10000132 名称:itemid

此时一切都很好,但是当我做类似的事情时

trainingData['itemid','category'].head() 错误: -------------------------------------------------- ------------------------- UnicodeDecodeError Traceback(最近一次调用最后一次) /home/vikram/Documents/Avito/ in () ----> 1 trainingData[['itemid','category']].head() /usr/lib/python2.7/dist-packages/IPython/core/displayhook.pyc in __call__(self, result) 第236章 第237章 --> 238 format_dict = self.compute_format_data(结果) 第239章 240 self.update_user_ns(结果) /usr/lib/python2.7/dist-packages/IPython/core/displayhook.pyc 在 compute_format_data(self, result) 148 对象的 MIME 类型表示。 第149章 --> 150 返回 self.shell.display_formatter.format(result) 151 152 def write_format_data(自我,format_dict): /usr/lib/python2.7/dist-packages/IPython/core/formatters.pyc 格式(self,obj,include,exclude) 124 继续 125尝试: --> 126 数据 = 格式化程序(obj) 127 除了: 128 # FIXME:记录异常 /usr/lib/python2.7/dist-packages/IPython/core/formatters.pyc 在 __call__(self, obj) 第445章 第446章 --> 447 打印机.pretty(obj) 第448章 第449章 /usr/lib/python2.7/dist-packages/IPython/lib/pretty.pyc in pretty(self, obj) 352 如果可调用(obj_class._repr_pretty_): 第353章 --> 354 return _default_pprint(obj, self, cycle) 最后355: 第356章 /usr/lib/python2.7/dist-packages/IPython/lib/pretty.pyc in _default_pprint(obj, p, cycle) 472 如果 getattr(klass, '__repr__', None) 不在 _baseclass_reprs 中: 473 #用户提供的repr。 --> 474 p.text(repr(obj)) 475返回 476 p.begin_group(1,'456 self.to_string(buf=buf) 457 价值 = buf.getvalue() 458 if max([len(l) for l in value.split('\n')]) > terminal_width: /usr/lib/pymodules/python2.7/pandas/core/frame.pyc in to_string(self, buf, columns, col_space, colSpace, header, index, na_rep, formatters, float_format, sparseify, nanRep, index_names, justify, force_unicode ) 第1024章 1025 标头=标头,索引=索引) -> 1026 formatter.to_string(force_unicode=force_unicode) 1027 如果 buf 为无,则为 1028: /usr/lib/pymodules/python2.7/pandas/core/format.pyc in to_string(self, force_unicode) 176 for i, c in enumerate(self.columns): 177 如果 self.header: --> 178 fmt_values = self._format_col(c) 第179章 180 max_len = max(max(len(x) for x in fmt_values), /usr/lib/pymodules/python2.7/pandas/core/format.pyc in _format_col(self, col) 第217章 第218章 --> 219 空间=self.col_space) 220 第221章 /usr/lib/pymodules/python2.7/pandas/core/format.pyc in format_array(values, formatter, float_format, na_rep, digits, space, justify) 第424章 425 --> 426 返回 fmt_obj.get_result() 427 428 /usr/lib/pymodules/python2.7/pandas/core/format.pyc 在 get_result(self) 第471章 472 其他: --> 473 fmt_values.append('%s' %_format(v)) 474 第475章 /usr/lib/pymodules/python2.7/pandas/core/format.pyc in _format(x) 457 其他: 第458章 --> 459 return '%s' % formatter(x) 460 第461章 /usr/lib/pymodules/python2.7/pandas/core/common.pyc 在 _stringify(col) 第503章 504 # unicode 解决方法 --> 505 返回 unicode(col) 506 第507章 UnicodeDecodeError:“ascii”编解码器无法解码位置 0 中的字节 0xd0:序数不在范围内(128)

请帮我正确“显示”数据。

【问题讨论】:

【参考方案1】:

我遇到了由 IPython 引起的相同问题,它无法显示 Pandas head() 函数返回的非 ASCII 文本。事实证明,Python 的默认编码在我的机器上设置为'ascii'。你可以检查一下

import sys
sys.getdefaultencoding()

解决方法是重新设置默认编码为 UTF-8:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

在此之后,IPython 正确显示了带有非 ASCII 字符的 Pandas 数据帧。

请注意,reload 调用是使setdefaultencoding 函数可用所必需的。没有它你会得到错误:

AttributeError: 'module' object has no attribute 'setdefaultencoding'

【讨论】:

以上是关于如何打印包含一些俄语的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中的日期时间中删除时间戳

如何在熊猫数据框中使用应用时创建列时间戳?

序列化包含熊猫数据框的字典(Python)

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]

漂亮地打印熊猫数据框

如何使用 for 循环过滤熊猫数据框中的观察结果?