2015-07-10 20 views
16

Ho pulito 400 file excel e li ho letti in python utilizzando panda e aggiunto tutti i dati grezzi in un unico grande df.Errore di codifica Unicode durante la scrittura di pandas df su csv

Poi quando si tenta di esportare in un file CSV:

df.to_csv("path",header=True,index=False) 

ottengo questo errore:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 20: ordinal not in range(128) 

Qualcuno può suggerire un modo per risolvere questo problema e che cosa significa?

Grazie

+0

Indica se stai usando python 2 o 3, questi due gestiscono Unicode in modo molto diverso. Quindi leggi [howto in Unicode] (https://docs.python.org/3/howto/unicode.html), che fornisce un buon background per questo errore. Questi problemi non sono difficili da risolvere, ma devi prima conoscere le basi. – roeland

+0

Sto usando python 2 –

+0

https://docs.python.org/2.7/howto/unicode.html – marbel

risposta

31

Hai unicode valori nel vostro dataframe. I file archiviano i byte, il che significa che tutti i unicode devono essere codificati in byte prima che possano essere memorizzati in un file. Devi specificare una codifica, ad esempio utf-8. Ad esempio,

df.to_csv('path', header=True, index=False, encoding='utf-8') 

Se non si specifica una codifica, quindi la codifica utilizzata da df.to_csv default ascii in python2, o utf-8 in python3.

6

Aggiunta di una risposta per aiutare me stesso google in un secondo momento:

Un trucco che mi ha aiutato è quello di codificare una serie problematico, poi decodificare di nuovo a utf-8. Ad esempio:

df['crumbs'] = df['crumbs'].map(lambda x: x.encode('unicode-escape').decode('utf-8')) 

In questo modo anche il dataframe viene stampato correttamente.