[PYTHON] Précautions lors de l'utilisation de codecs et de pandas

environnement

version

$ python --version
Python 2.7.12 :: Continuum Analytics, Inc.
$ pip freeze | grep pandas
pandas==0.19.1

Exemple de fichier

$ 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 dedf.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

Précautions lors de l'utilisation de codecs et de pandas
Précautions lors de l'utilisation de l'instruction for dans les pandas
Précautions lors de l'utilisation de Chainer
Lors de l'utilisation si et lors de l'utilisation pendant
Précautions lors de l'utilisation de l'analyse des traits TextBlob
Précautions lors de l'utilisation de la fonction urllib.parse.quote
Précautions lors de l'utilisation de phantomjs de python
Précautions lors de l'utilisation de six avec Python 2.5
Précautions et gestion des erreurs lors de l'appel de la DLL .NET à partir de python à l'aide de pythonnet
Précautions lors de l'utilisation de tf.keras.layers.TimeDistributed pour la couche personnalisée tf.keras
Précautions lors de l'utilisation de la bibliothèque google-cloud avec GAE / py
Erreur survenue dans OpenCV3 et sa solution Précautions lors de l'utilisation d'OpenCV3 sur Mac
Précautions à prendre lors de la manipulation de Luigi
Précautions lors de l'utilisation de sqlite3 de macOS Sierra (10.12) avec le multitraitement
Tableau croisé à l'aide de Pandas
installation de jupyter et pandas
index et réindexation des pandas
Conseils et précautions lors du portage des programmes MATLAB vers Python
pandas rééchantillonner et rouler
Précautions lors de l'installation de fbprophet
Résumé des choses qui étaient pratiques lors de l'utilisation de pandas
Moyenne et liste des pandas
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Précautions lors du changement d'heure Unix en type datetime dans les pandas
Analyser les cours des actions à l'aide de l'agrégation de données pandas et des opérations du groupe
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
Précautions et solutions lors de l'installation d'Ubuntu sur un PC avec NVIDIA Gravo
Points (personnels) lors de l'utilisation de ctypes
Variables d'environnement lors de l'utilisation de Tkinter
Précautions pour la mise à niveau de TensorFlow (vers la version 1.3)
Lors de l'utilisation d'optparse avec iPython
Ajouts clés aux pandas 1.1.0 et 1.0.0
Paramètres de DEBUG lors de l'utilisation de Django
Structure de fichier lors de l'utilisation d'exigences python sans serveur
Ceci et cela en utilisant Reflect
Essayez d'utiliser pytest-Overview and Samples-
Utilisez configparser lors de l'utilisation de l'API
Analyse de données à l'aide de pandas python
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
[Python] Mémo d'erreur et de solution lors de l'utilisation de venv avec pyenv + anaconda
Précautions lors du passage de def aux fonctions triées et groupby en Python? ??
Comment formater un tableau à l'aide de Pandas Appliquer, pivoter et permuter le niveau