Tengo un marco de datos en pandas que me gustaría escribir en un archivo CSV. Estoy haciendo esto usando:
df.to_csv('out.csv')
Y obteniendo el error:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)
¿Hay alguna forma de evitar esto fácilmente (es decir, tengo caracteres Unicode en mi marco de datos)? ¿Y hay una manera de escribir en un archivo delimitado por tabulaciones en lugar de un CSV utilizando, por ejemplo, un método 'to-tab' (que no creo que exista)?
index=False
para soltar el índice.Cuando esté almacenando un
DataFrame
objeto en un archivo csv utilizando elto_csv
método, probablemente no necesitará almacenar los índices anteriores de cada fila delDataFrame
objeto.Puede evitar eso pasando un
False
valor booleano alindex
parámetro.Algo así como:
Entonces, si su objeto DataFrame es algo así como:
El archivo csv almacenará:
en lugar de (el caso cuando se pasó el valor predeterminado
True
)fuente
df.rename_axis('index_name')
? eso no altera el archivo en sí mismoPara escribir un DataFrame de pandas en un archivo CSV, necesitará
DataFrame.to_csv
. Esta función ofrece muchos argumentos con valores predeterminados razonables que la mayoría de las veces tendrá que anular para adaptarse a su caso de uso específico. Por ejemplo, es posible que desee utilizar un separador diferente, cambiar el formato de fecha y hora o descartar el índice al escribir.to_csv
tiene argumentos que puede pasar para abordar estos requisitos.Aquí hay una tabla que enumera algunos escenarios comunes de escritura en archivos CSV y los argumentos correspondientes que puede usar para ellos.
fuente
Algo más que puedes probar si tienes problemas para codificar 'utf-8' y quieres ir celda por celda, puedes intentar lo siguiente.
Python 2
(Donde "df" es su objeto DataFrame).
Entonces intenta:
Puede verificar la codificación de las columnas de la siguiente manera:
Advertencia: errors = 'ignore' simplemente omitirá el carácter, por ejemplo
Python 3
fuente
A veces enfrenta estos problemas si especifica también la codificación UTF-8. Le recomiendo que especifique la codificación al leer el archivo y la misma codificación al escribir en el archivo. Esto podría resolver tu problema.
fuente
Ejemplo de exportación en archivo con ruta completa en Windows y en caso de que su archivo tenga encabezados :
Ejemplo si desea almacenar en la carpeta en el mismo directorio donde está su script, con codificación utf-8 y tabulador como separador :
fuente
podría no ser la respuesta para este caso, pero como tenía el mismo mensaje de error
.to_csv
que intenté.toCSV('name.csv')
y el mensaje de error era diferente ("SparseDataFrame' object has no attribute 'toCSV'
). Así que el problema se resolvió convirtiendo el marco de datos en un marco de datos densofuente
.toCSV
y no.to_csv
. Olvidaste el guión bajo