web-dev-qa-db-fra.com

Pandas.read_csv () avec des caractères spéciaux (accents) dans les noms de colonne

J'ai un fichier csv qui contient des données avec des noms de colonnes:

  • "PÉRIODE"
  • "IAS_brut"
  • "IAS_lissé"
  • "Incidence_Sentinelles"

J'ai un problème avec le troisième"IAS_lissé"qui est mal interprété par la méthode pd.read_csv() et renvoyé sous forme de.

Quel est ce personnage?

Puisqu'il génère un bogue dans mon application de flacon, existe-t-il un moyen de lire cette colonne d'une autre manière sans modifier le fichier?

In [1]: import pandas as pd

In [2]: pd.read_csv("Openhealth_S-Grippal.csv",delimiter=";").columns

Out[2]: Index([u'PERIODE', u'IAS_brut', u'IAS_liss�', u'Incidence_Sentinelles'], dtype='object')
7
farhawa

Vous pouvez modifier le paramètre encoding pour read_csv, voir le document relatif aux pandas ici . De plus, les codages standard Python sont ici

Je crois que pour votre exemple, vous pouvez utiliser le codage utf-8 (en supposant que votre langue est le français). 

df = pd.read_csv("Openhealth_S-Grippal.csv", delimiter=";", encoding='utf-8')

Voici un exemple montrant un exemple de sortie. Tout ce que je fis fut de créer un fichier csv avec une colonne en utilisant les caractères problématiques.

df = pd.read_csv('sample.csv', encoding='utf-8')

Sortie:

    IAS_lissé
0   1
1   2
2   3
2
shawnheide

Utiliser utf-8 n'a pas fonctionné pour moi. Par exemple. ce morceau de code: 

    bla = pd.DataFrame(data = [1, 2])
    bla.to_csv('funkyNamé , things.csv')
    blabla = pd.read_csv('funkyNamé , things.csv', delimiter=";", encoding='utf-8')
    blabla 

Finalement renvoyé: OSError: l'initialisation à partir d'un fichier a échoué

Je sais que vous avez dit que vous ne vouliez pas modifier le fichier. Si vous vouliez dire le contenu du fichier par rapport au nom du fichier, je renommerais le fichier en un élément sans accent, lirais le fichier csv sous son nouveau nom, puis rétablirais le nom du fichier. 

    originalfilepath = r'C:\Users\myself\\funkyNamé , things.csv'
    originalfolder = r'C:\Users\myself'
    os.rename(originalfilepath, originalFolder+"\\tempName.csv")
    df = pd.read_csv(originalFolder+"\\tempName.csv", encoding='ISO-8859-1')
    os.rename(originalFolder+"\\tempName.csv", originalfilepath)

Si vous vouliez dire "sans modifier le fichierprénom, mes excuses pour ne pas vous aider, et j'espère que cela aidera quelqu'un d'autre. 

1
pantherenoire

J'ai trouvé le même problème avec l'espagnol, résolu avec l'encodage "latin1":

import pandas as pd

 pd.read_csv("Openhealth_S-Grippal.csv",delimiter=";", encoding='latin1')

J'espère que ça aide!