$ python --version
Python 2.7.12 :: Continuum Analytics, Inc.
$ pip freeze | grep pandas
pandas==0.19.1
$ file --mime sample.tsv
sample.tsv: text/plain; charset=utf-8
$ cat sample.tsv
ID-Sprache
1 Japaner
2 Englisch
codecs
Zuallererst "Codecs"
>>> open("sample.tsv", "r").read()
'ID\t\xe8\xa8\x80\xe8\xaa\x9e\n1\t\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\n2\t\xe8\x8b\xb1\xe8\xaa\x9e\n'
>>> import codecs
>>> codecs.open("sample.tsv", "r", "utf-8").read()
u'ID\t\u8a00\u8a9e\n1\t\u65e5\u672c\u8a9e\n2\t\u82f1\u8a9e\n'
Wenn Sie es mit "Codecs" lesen, wird es zu "Unicode".
pandas
Die Funktion "read_table", die beim Lesen von "tsv" hilfreich ist.
>>> import pandas as pd
>>> df = pd.read_table(open("sample.tsv", "r"))
>>> df
ID-Sprache
0 1 Japanisch
1 2 Englisch
>>> df.columns
Index([u'ID', u'Sprache'], dtype='object')
>>> df[u"Sprache"]
Traceback (most recent call last):
...
KeyError: u'\u8a00\u8a9e'
>>> list(df.columns)
['ID', '\xe8\xa8\x80\xe8\xaa\x9e']
>>> type(list(df.columns)[1])
<type 'str'>
>>> df["Sprache"]
0 Japanisch
1 Englisch
Name:Sprache, dtype: object
Ich bin nicht sicher, ob "u" in der Anzeige von "df.columns" angezeigt wird. Es ist verständlich, dass der Typ der Zeichenfolge "str" ist.
codecs & pandas
with read_table
Dann, wenn Sie "Codecs" verwenden und mit "read_table" lesen
>>> df = pd.read_table(codecs.open("sample.tsv", "r", "utf-8"))
>>> df
ID-Sprache
0 1 Japanisch
1 2 Englisch
>>> df[u"Sprache"]
Traceback (most recent call last):
...
KeyError: u'\u8a00\u8a9e'
>>> df["Sprache"]
0 Japanisch
1 Englisch
Name:Sprache, dtype: object
Es scheint aus irgendeinem Grund "str" zu sein.
without read_table
>>> from collections import defaultdict
>>> data = defaultdict(list)
>>> f = codecs.open("sample.tsv", "r", "utf-8")
>>> labels = f.readline()[:-1].split("\t") #Teilen Sie andere Zeilenumbrüche als Zeilenumbrüche
>>> values = f.readline()[:-1].split("\t") #Teilen Sie andere Zeilenumbrüche als Zeilenumbrüche
>>> for label, value in zip(labels, values):
... data[label].append(value)
...
>>> df = pd.DataFrame(data)
>>> df
ID-Sprache
0 1 Japanisch
>>> df["Sprache"]
Traceback (most recent call last):
...
KeyError: '\xe8\xa8\x80\xe8\xaa\x9e'
>>> df[u"Sprache"]
0 Japanisch
Name:Sprache, dtype: object
>>> list(df.columns)
[u'ID', u'\u8a00\u8a9e']
>>> type(list(df.columns)[1])
<type 'unicode'>
Ohne read_table
zu benutzen
Beim Lesen mit "Codecs",
Es war wie erwartet.
Recommended Posts