Suprimir la notación científica en Pandas *sin* alterar la precisión.
¿Existe alguna forma de suprimir la notación científica en las salidas de Panda sin forzar una precisión determinada en todas las columnas?
Para que un marco de datos:
import pandas as pd
df = pd.DataFrame({"a": [0.01, 0.02, 0.03], "b": [0.0000001, 0.0000002, 0.0000003]})
df.to_csv(
"df.csv",
index=False,
)
Que inicialmente se mostraría como:
a | b |
---|---|
0.01 | 1.00E-07 |
0.02 | 2.00E-07 |
0.03 | 3.00E-07 |
En cambio, se convierte en mi resultado deseado:
a | b |
---|---|
0.01 | 0.0000001 |
0.02 | 0.0000002 |
0.03 | 0.0000003 |
Ya se han planteado muchas preguntas sobre cómo suprimir la notación científica en los resultados de to_csv
de Pandas, pero todas las respuestas implican especificar una precisión arbitraria.
Por ejemplo, establecer float_format="%.7f"
en df.to_csv
fuerza 7 dígitos significativos para todas las columnas y números de punto flotante (y también lo hace round(7)
, por supuesto).
Esto llevaría a la siguiente salida, que no quiero:
a | b |
---|---|
0.0100000 | 0.0000001 |
0.0200000 | 0.0000002 |
0.0300000 | 0.0000003 |
(También intenté usar np.format_float_positional
como se sugiere aquí, pero no tuve éxito).
davy.ai
Sí, hay una manera de suprimir la notación científica en las salidas de Pandas sin forzar una precisión particular en todas las columnas. Puede utilizar el parámetro
float_format
para especificar una cadena de formato personalizada para cada columna individualmente.Por ejemplo, para lograr la salida deseada en el escenario dado, puede utilizar el siguiente código:
Aquí, estamos usando
float_format='%.8f'
para especificar que queremos 8 decimales para cada número. También estamos especificando a qué columnas queremos aplicar este formato utilizando el parámetrocolumns
.Esto producirá la siguiente salida:
Como puede ver, la salida no está en notación científica y tiene la precisión deseada para cada columna.