我正在通过ipython使用pandas处理excel表。表包含西里尔字。当我试图挖掘数据时,我总是得到一串数字而不是单词。它看起来像这样:
In [16]: report_sorted_geo['country'].unique()
Out[16]:
array([u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f',
u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d',
u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f',
u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c',
u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c',
u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430',
u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f',
u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433',
u'\u0413\u0440\u0443\u0437\u0438\u044f',
有解决方法吗?
当我只是尝试打印输出时,输出正常:
In [17]: print "привет"
привет
有谁知道如何解决这个问题?
答案 0 :(得分:3)
这是转换字符串列表以使其在Python 2中更易读的一种方法。此代码显式地将Unicode数据编码为utf-8字节。
#!/usr/bin/env python
data = [
u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f',
u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d',
u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f',
u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c',
u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c',
u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430',
u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f',
u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433',
u'\u0413\u0440\u0443\u0437\u0438\u044f',
]
def list_to_utf8(seq):
t = [" u'%s'" % s.encode('utf-8') for s in seq]
return '[\n' + ',\n'.join(t) + '\n]'
print list_to_utf8(data)
<强>输出强>
[
u'Абхазия',
u'Азербайджан',
u'Армения',
u'Беларусь',
u'Вьетнам',
u'Гватемала',
u'Германия',
u'Гонконг',
u'Грузия'
]
要在Python代码中使用此数据,必须在脚本顶部提供有效的utf-8编码声明,并且还必须告诉文本编辑器使用utf保存文件-8编码。
<强>测试强>
#!/usr/bin/env python
# -*- coding: utf_8 -*-
data = [
u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f',
u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d',
u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f',
u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c',
u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c',
u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430',
u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f',
u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433',
u'\u0413\u0440\u0443\u0437\u0438\u044f',
]
newdata = [
u'Абхазия',
u'Азербайджан',
u'Армения',
u'Беларусь',
u'Вьетнам',
u'Гватемала',
u'Германия',
u'Гонконг',
u'Грузия'
]
for s1, s2 in zip(data, newdata):
print s1 == s2, s1, s2
<强>输出强>
True Абхазия Абхазия
True Азербайджан Азербайджан
True Армения Армения
True Беларусь Беларусь
True Вьетнам Вьетнам
True Гватемала Гватемала
True Германия Германия
True Гонконг Гонконг
True Грузия Грузия
答案 1 :(得分:1)
由于您的终端支持它,为什么不只是print
数组的每个元素,让Python处理字形:
In [49]: for e in a:
....: print e
....:
Абхазия
Азербайджан
Армения
Беларусь
Вьетнам
Гватемала
Германия
Гонконг
Грузия