web-dev-qa-db-fra.com

Spécification du type de données dans Pandas csv reader

Je viens de commencer avec Pandas et je lis dans un fichier csv en utilisant la méthode read_csv() . La difficulté que j'ai est de prévenir = pandas de la conversion de mes numéros de téléphone en grands nombres, au lieu de les conserver sous forme de chaînes. J'ai défini un convertisseur qui laisse les chiffres seuls, mais ils sont toujours convertis en nombres. Quand j'ai changé mon convertisseur en ajouter un "z" aux numéros de téléphone, puis ils sont restés des chaînes. Existe-t-il un moyen de les conserver sans modifier les valeurs des champs?

40
Gardner

Depuis Pandas 0.11.0 vous pouvez utiliser l'argument dtype pour spécifier explicitement le type de données pour chaque colonne:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'})
45
zero323

Il semble que vous ne puissiez pas éviter pandas d'essayer de convertir des valeurs numériques/booléennes dans le fichier CSV. Jetez un œil au code source de pandas for les IO analyseurs, en particulier les fonctions _convert_to_ndarrays, et _convert_types. https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

Vous pouvez toujours attribuer le type souhaité après avoir lu le fichier:

df.phone = df.phone.astype(str)
16
lbolla