$ 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
Langue d'identification
1 japonais
2 anglais
codecs
Tout d'abord, 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'
Si vous le lisez avec codecs
, il deviendra ʻunicode`.
pandas
La fonction read_table
, qui est utile lors de la lecture tsv
.
>>> import pandas as pd
>>> df = pd.read_table(open("sample.tsv", "r"))
>>> df
Langue d'identification
0 1 japonais
1 2 Anglais
>>> df.columns
Index([u'ID', u'Langue'], dtype='object')
>>> df[u"Langue"]
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["Langue"]
0 japonais
1 anglais
Name:Langue, dtype: object
Je ne suis pas sûr que ʻusoit dans l'affichage de
df.columns`,
Il est compréhensible que le type de la chaîne soit «str».
codecs & pandas
with read_table
Ensuite, si vous utilisez codecs
et lisez avec read_table
>>> df = pd.read_table(codecs.open("sample.tsv", "r", "utf-8"))
>>> df
Langue d'identification
0 1 japonais
1 2 Anglais
>>> df[u"Langue"]
Traceback (most recent call last):
...
KeyError: u'\u8a00\u8a9e'
>>> df["Langue"]
0 japonais
1 anglais
Name:Langue, dtype: object
Cela semble être «str» pour une raison quelconque.
without read_table
>>> from collections import defaultdict
>>> data = defaultdict(list)
>>> f = codecs.open("sample.tsv", "r", "utf-8")
>>> labels = f.readline()[:-1].split("\t") #Diviser autre que les sauts de ligne par des tabulations
>>> values = f.readline()[:-1].split("\t") #Diviser autre que les sauts de ligne par des tabulations
>>> for label, value in zip(labels, values):
... data[label].append(value)
...
>>> df = pd.DataFrame(data)
>>> df
Langue d'identification
0 1 japonais
>>> df["Langue"]
Traceback (most recent call last):
...
KeyError: '\xe8\xa8\x80\xe8\xaa\x9e'
>>> df[u"Langue"]
0 japonais
Name:Langue, dtype: object
>>> list(df.columns)
[u'ID', u'\u8a00\u8a9e']
>>> type(list(df.columns)[1])
<type 'unicode'>
Sans utiliser read_table
Lorsqu'il est lu avec codecs
,
C'était comme prévu.
Recommended Posts