Hola tengo una df como:

COL1        COL2
0.005554    0.35200000000000004
5.622e-11   0.267
0.006999999999999999    0.307
2.129e-14   0.469
2.604e-14   0.39
1.395e-60   0.27899999999999997
8.589999999999998e-74   0.29600000000000004
1.025e-42   0.4270000000000001

Sé cómo redondear el dígito en el COL2 usando

df['COL2'] = df['COL2'].round(3)

Pero si hago lo mismo para COL1 solo muestra 0

Cómo puedo conseguir en su lugar:

COL1        COL2
0.005   0.352
5.622e-11   0.267
0.007   0.307
2.129e-14   0.469
2.604e-14   0.39
1.395e-60   0.279
8.560e-74   0.296
1.025e-42   0.427

De hecho, el gran problema está aquí:

Muestra: 8.589999999999998e-74 y me gustaría mantener solo el número 3 después del coma

8.590e-74
1
chippycentra 27 ago. 2020 a las 16:07

3 respuestas

La mejor respuesta

No desea redondear los valores de la primera columna; el redondeo significa que los dígitos inferiores se han ido. Creo que lo que realmente quieres hacer es cambiar la forma en que Pandas muestra los datos en la pantalla y no los valores reales en el marco de datos. El valor predeterminado ya es la notación científica.

Puede especificar el formato de visualización para todas las columnas así (esto mostrará los primeros tres dígitos después del punto):

pd.set_option('display.float_format', lambda x: '%.3f' % x)

Dado que desea mantener el formato del primero pero no del segundo, es posible que deba establecer el formato para cada columna individualmente. Puede utilizar estilo para la columna 2:

df.style.format({'COL2': '{:.3f}')

Editar: dado que su respuesta es para guardar en CSV, deberá pasar esto como un argumento a to_csv: float_format='{:.3E}'. Esto guardará todas las columnas en notación científica. Si solo desea esto para la columna 1, puede probar las soluciones para esta pregunta.

3
Darina 27 ago. 2020 a las 13:29

Suponiendo que solo desea hacer esto con fines de visualización, puede configurar

pd.options.display.precision = 3
print(df)

O solo hacerlo en un contexto temporal:

with pd.option_context('display.precision', 3):
    print(df)
1
Martin Valgur 27 ago. 2020 a las 13:20

¿Las líneas 1 y 3 del marco de datos resultante también son 0? porque todas las demás líneas son 0 cuando se redondean al tercer decimal porque 5.622e-11 es 0.00000000005622, por lo tanto, redondeado a 3 decimales, es 0.

0
nachtgoblin24 27 ago. 2020 a las 13:34