2016-12-20 1 views
-1

J'ai un Pandas python dataframe qui lit un fichier csv ou Excel comme ceci:erreur de codage Unicode lors du téléchargement python dataframe

if fileType == 'csv': 
      df = pd.read_csv(templateFilePath, converters=converters) 
     else: 
      df = pd.read_excel(templateFilePath, sheetname=sheetName, converters=converters) 

     df.fillna('', inplace=True) 

Dans l'un des fichiers que je suis en train de télécharger, il a une valeur: Banque des Règlements Internationaux (BRI) - Bâle/Bank for International Settlements

Et je continue à obtenir cette erreur à cause de cela: UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-15: ordinal not in range(128)

Comment puis-je résoudre ce problème?

MISE À JOUR:

Faire comme ceci:

 if fileType == 'csv': 
      df = pd.read_csv(templateFilePath, converters=converters) 
     else: 
      df = pd.read_excel(templateFilePath, sheetname=sheetName, converters=converters) 

     df.fillna('', inplace=True) 
     # for col in colNames: 
     df['COUNTRY_NAME']=df['COUNTRY_NAME'].map(lambda x: x.encode('unicode-escape').decode('utf-8')) 

Et il fixe l'erreur qui allait arriver lors du téléchargement du fichier. Mais je ne veux pas spécifier de nom de colonne (comme ici je spécifie 'country_name') car unicode peut être présent dans n'importe quelle colonne. Comment je fais ça?

+0

# - * - codage: utf-8 - * - en première ligne? –

Répondre

0

J'ai couru dans UnicodeEncodeError et utilisé encoding=latin-1 pour fixer le code:

if fileType == 'csv': 
    try: 
     df = pd.read_csv(templateFilePath, converters=converters) 
    except UnicodeDecodeError: 
     df = pd.read_csv(templateFilePath, converters=converters, encoding='latin-1') 

Edit:

Je ne pense pas que cette question fait plus de sens. Dans tous les cas ici est une réponse à l'autre (apparemment sans rapport) question:

def re_encode(x): 
    try: 
     x_ = x.encode('unicode-escape').decode('utf-8') 
    except: 
     x_ = x 
    return x_ 

df = df.applymap(re_encode) 
+0

Non, ça ne marche pas. Ce qui fonctionne est: df ['COUNTRY_NAME'] = df ['COUNTRY_NAME']. Map (lambda x: x.encode ('unicode-escape'). Decode ('utf-8')), mais je ne sais pas Voulez-vous coder en dur le nom de la colonne, ne peut-il pas vérifier toutes les colonnes? – Natasha

+0

Cela signifie que vous avez été en mesure de charger les données? – AlexG

+0

Utilisation de: df ['COUNTRY_NAME'] = df ['COUNTRY_NAME']. Map (lambda x: x.encode ('unicode-escape'). Decode ('utf-8')) J'ai pu. Parce que pour le moment, unicode n'est présent que dans la colonne 'Country_Name', mais il pourrait aussi être présent dans d'autres colonnes, donc je ne veux pas coder en dur une colonne. – Natasha