python - panda - pd read_csv utf 8
pandas to_csv: suprime la notación cientÃfica en el archivo csv al escribir pandas para csv (2)
Estoy escribiendo un pandas df en un csv. Cuando lo escribo en un archivo csv, algunos de los elementos en una de las columnas se convierten incorrectamente a notación / números científicos. Por ejemplo, col_1 tiene cadenas como ''104D59''. Las cadenas se representan principalmente como cadenas en el archivo csv, como deberían ser. Sin embargo, las cadenas ocasionales, como ''104E59'', se están convirtiendo en notación científica (por ejemplo, 1.04 E 61) y se representan como enteros en el siguiente archivo csv.
Estoy tratando de exportar el archivo csv a un paquete de software (es decir, pandas -> csv -> software_nuevo) y este cambio en el tipo de datos está causando problemas con esa exportación.
¿Hay alguna forma de escribir el df en un csv, asegurándose de que todos los elementos en df [''problem_col''] se representen como cadenas en el csv resultante o no se conviertan a notación científica?
Aquí está el código que he usado para escribir pandas df en un csv: df.to_csv (''df.csv'', encoding = ''utf-8'')
También compruebo el tipo de la columna del problema: para df.dtype, df [''problem_column''] es un objeto
Usa el argumento float_format
:
In [11]: df = pd.DataFrame(np.random.randn(3, 3) * 10 ** 12)
In [12]: df
Out[12]:
0 1 2
0 1.757189e+12 -1.083016e+12 5.812695e+11
1 7.889034e+11 5.984651e+11 2.138096e+11
2 -8.291878e+11 1.034696e+12 8.640301e+08
In [13]: print(df.to_string(float_format=''{:f}''.format))
0 1 2
0 1757188536437.788086 -1083016404775.687134 581269533538.170288
1 788903446803.216797 598465111695.240601 213809584103.112457
2 -829187757358.493286 1034695767987.889160 864030095.691202
Que funciona de manera similar para to_csv:
df.to_csv(''df.csv'', float_format=''{:f}''.format, encoding=''utf-8'')
Si desea usar los valores como una cadena formateada en una lista, digamos como parte de csvfile csv.writier, los números pueden formatearse antes de crear una lista:
with open(''results_actout_file'',''w'',newline='''') as csvfile:
resultwriter = csv.writer(csvfile, delimiter='','')
resultwriter.writerow(header_row_list)
resultwriter.writerow(df[''label''].apply(lambda x: ''%.17f'' % x).values.tolist())