una renombrar normalizar libreria filtrar eliminar datos columnas columna agregar python csv pandas dataframe

python - renombrar - Pandas escribiendo el marco de datos en un archivo CSV



pandas renombrar columnas (7)

A veces se enfrenta a estos problemas si también especifica la codificación UTF-8. Le recomiendo que especifique la codificación mientras lee el archivo y la misma codificación mientras escribe en el archivo. Esto podría resolver su problema.

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 usando, por ejemplo, un método ''to-tab'' (que no creo que exista)?


Me gustaría agregar algo a lo que Andy Hayden ya mencionó en su respuesta.

Cuando almacena un objeto DataFrame en un archivo csv utilizando el método to_csv , probablemente no necesite almacenar los índices anteriores de cada fila del objeto DataFrame .

Puede evitar eso pasando un valor booleano False al parámetro de index .

Algo así como

df.to_csv(file_name, encoding=''utf-8'', index=False)

Entonces si tu objeto DataFrame es algo como:

Color Number 0 red 22 1 blue 10

El archivo csv almacenará:

Color,Number red,22 blue,10

en lugar de (el caso cuando se pasó el valor predeterminado True )

,Color,Number 0,red,22 1,blue,10

Encontré que vale la pena compartirlo, Saludos! :-)


Otra cosa que puedes probar si tienes problemas con la codificación de ''utf-8'' y quieres ir de celda en celda, puedes probar lo siguiente.

Python 2

(Donde "df" es su objeto DataFrame).

for column in df.columns: for idx in df[column].index: x = df.get_value(idx,column) try: x = unicode(x.encode(''utf-8'',''ignore''),errors =''ignore'') if type(x) == unicode else unicode(str(x),errors=''ignore'') df.set_value(idx,column,x) except Exception: print ''encoding error: {0} {1}''.format(idx,column) df.set_value(idx,column,'''') continue

Entonces intenta:

df.to_csv(file_name)

Puede verificar la codificación de las columnas por:

for column in df.columns: print ''{0} {1}''.format(str(type(df[column][0])),str(column))

Advertencia: errores = ''ignorar'' solo omitirá el carácter, por ejemplo

IN: unicode(''Regenexx/xae'',errors=''ignore'') OUT: u''Regenexx''

Python 3

for column in df.columns: for idx in df[column].index: x = df.get_value(idx,column) try: x = x if type(x) == str else str(x).encode(''utf-8'',''ignore'').decode(''utf-8'',''ignore'') df.set_value(idx,column,x) except Exception: print(''encoding error: {0} {1}''.format(idx,column)) df.set_value(idx,column,'''') continue


Para delimitar por una pestaña puedes usar el argumento sep de to_csv :

df.to_csv(file_name, sep=''/t'')

Para usar una codificación específica (por ejemplo, ''utf-8'') use el argumento de encoding :

df.to_csv(file_name, sep=''/t'', encoding=''utf-8'')


Si no quieres el índice.

df.to_csv("out.csv", index=False)


Puede que no sea la respuesta para este caso, pero como tuve el mismo mensaje de error con .to_csv intenté .toCSV (''name.csv'') y el mensaje de error fue diferente ("el objeto ''SparseDataFrame'' no tiene atributo '' toCSV ''"). Así que el problema se resolvió convirtiendo el marco de datos en un marco de datos denso

df.to_dense().to_csv("submission.csv", index = False, sep='','', encoding=''utf-8'')


df.to_csv(''out.csv'', sep='','')

Funcionará definitivamente.

Cambie df al nombre de su nombre de marco de datos y ejecute.

Utilice anaconda inactivo.