es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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).

Tags:  , , ,

Answer

  1. Avatar for 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:

    df.to_csv(
        "df.csv",
        index=False,
        float_format='%.8f',
        columns=['a', 'b']
    )
    

    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ámetro columns.

    Esto producirá la siguiente salida:

    a,b
    0.01000000,0.00000010
    0.02000000,0.00000020
    0.03000000,0.00000030
    

    Como puede ver, la salida no está en notación científica y tiene la precisión deseada para cada columna.

Comments are closed.