Formatear/suprimir la notación científica de los resultados de agregación de Pandas
¿Cómo se puede modificar el formato de salida de una operación groupby en pandas que produce notación científica para números muy grandes?
Sé cómo formatear cadenas en Python, pero no sé cómo aplicarlo aquí.
df1.groupby('dept')['data1'].sum()
dept
value1 1.192433e+08
value2 1.293066e+08
value3 1.077142e+08
Esto suprime la notación científica si convierto a cadena, pero ahora me pregunto cómo formatear cadenas y agregar decimales.
sum_sales_dept.astype(str)
Por supuesto, la respuesta que vinculé en los comentarios no es muy útil. Puede especificar su propio convertidor de cadenas de esta manera.
In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)
In [28]: Series(np.random.randn(3))*1000000000
Out[28]:
0 -757322420.605
1 -1436160588.997
2 -1235116117.064
dtype: float64
No estoy seguro de si esa es la forma preferida de hacer esto, pero funciona.
Convertir números en cadenas únicamente con fines estéticos parece una mala idea, pero si tiene una buena razón, esta es una forma:
In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]:
0 0.026
1 -0.482
2 -0.694
dtype: object
Aquí hay otra forma de hacerlo, similar a la respuesta de Dan Allan pero sin la función lambda:
>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0 0.41
1 0.99
2 0.10
o
>>> pd.set_option('display.float_format', '{:.2f}'.format)
Puede usar la función redonda solo para suprimir la notación científica para un marco de datos específico:
df1.round(4)
o puedes suprimirlo globalmente mediante:
pd.options.display.float_format = '{:.4f}'.format
Si desea aplicar estilo a la salida de un marco de datos en una celda de Jupyter Notebook, puede configurar el estilo de visualización por marco de datos:
df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")
Consulte la documentación aquí .