write excelwriter engine create python excel utf-8 pandas

excelwriter - Python pandas to_excel ''utf8'' codec no puede decodificar byte



save excel python (6)

Estoy tratando de hacer un trabajo de datos en los pandas de Python y tengo problemas para escribir mis resultados. Leí mis datos como un archivo CSV y estuve exportando cada script como su propio archivo CSV que funciona bien. Últimamente, aunque he intentado exportar todo en 1 archivo de Excel con hojas de trabajo y algunas de las hojas me dan un error

"''utf8'' codec no puede decodificar el byte 0xe9 en la posición 1: byte de continuación no válido"

No tengo ni idea de cómo empezar a encontrar cualquier carácter que pueda estar causando problemas al exportar a Excel. No estoy seguro de por qué se exporta a CSV bien, aunque :(

lineas relevantes

from pandas import ExcelWriter data = pd.read_csv(input) writer = ExcelWriter(output) #output is just the filename fundraisers.to_excel(writer, "fundraisers") locations.to_excel(writer, "locations") #error locations.to_csv(outputcsv) #works writer.save()

cabezal de impresión del marco de datos ofensivo

Event ID Constituent ID Email Address First Name / Last Name f 1 A A 1 F 4 L R C M 1 1 A D F 4 A A G M 2 0 R G M 3 O O H M 2 T E H M 2 A A H M 2 M M K F 3 J E K Location ID raised raised con raised email a 0 0 0 a 8 0 0 o 0 0 0 o 0 0 0 o 0 0 0 t 5 0 0 o 1 0 0 o 6 a 0 o 6 0 0 d 0 0 0

Al mirar la hoja de Excel, en realidad obtengo una impresión parcial. Cualquier cosa en la primera columna de nombre y más allá está en blanco, pero el evento, el constituyente y el correo electrónico se imprimen.

edit: Intentar leer el csv en utf8 falla, pero leerlo como latin1 funciona. ¿Hay alguna manera de especificar la codificación to_excel? ¿O decodificar y codificar mi marco de datos a utf8?


De manera similar a lo que dijo @Zenadix, leer los csvs en UTF-8 permitió que ExcelWriter escribiera sin errores.

df = pd.read_csv(''path'', encoding=''utf-8'') ... with pd.ExcelWriter(''new_path'') as writer: df.to_excel(writer, sheet_name=''Foo'')


En mi caso, el problema fue que inicialmente estaba leyendo el archivo CSV con la codificación incorrecta ( ASCII lugar de cp1252 ). Por lo tanto, cuando los pandas intentaron escribirlo en un archivo de Excel, encontró algunos caracteres que no pudo decodificar.

Lo resolví especificando la codificación correcta al leer el archivo CSV.

data = pd.read_csv(fname, encoding=''cp1252'')


En realidad, hay una manera de forzar la codificación utf8 al pasar un parámetro a ExcelWriter:

ew = pandas.ExcelWriter(''test.xlsx'',options={''encoding'':''utf-8''}) sampleList = [''Miño'', ''1'', ''2'', ''señora''] dataframe = pandas.DataFrame(sampleList) dataframe.to_excel(ew) ew.save()


Lo más simple es cargar su marco de datos en utf-8. Entonces ExcelWriter lo guardará sin problema.

data = pd.read_csv(path,encoding=''utf-8'')


Logró resolver esto.

Hice una función que atraviesa mis columnas que tienen cadenas y logré decodificarlas / codificarlas en utf8 y ahora funciona.

def changeencode(data, cols): for col in cols: data[col] = data[col].str.decode(''iso-8859-1'').str.encode(''utf-8'') return data


no sé cuándo se lanzará, pero puedes probar con mi repositorio github:

https://github.com/jtornero/pandas

Puedes clonarlo y construir pandas desde la fuente; El problema está casi resuelto y funciona como

sampleList = [''Miño'', ''1'', ''2'', ''señora''] dataframe = pandas.DataFrame(sampleList) ew = pandas.ExcelWriter(''./test.xls'', encoding=''utf-8'') dataframe.to_excel(ew) ew.save()

Aclamaciones

Jorge tornero