Formato / Supresión de la notación científica de los resultados de la agregación de Python Pandas

¿Cómo se puede modificar el formato para la salida de una operación groupby en pandas que produce una notación científica para números muy grandes? Sé cómo hacer el formateo de 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 me convierto a una cadena, pero ahora me pregunto cómo dar formato a las 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 cadena como tal.

 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 los números en cadenas puramente con fines estéticos parece una mala idea, pero si tienes 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 de redondeo solo para suprimir la notación científica para un dataframe específico:

 df1.round(4) 

O puedes suprimir es globalmente por:

 pd.options.display.float_format = '{:.4f}'.format 

Si desea usar los valores, digamos que como parte de csvfile csv.writer, los números se pueden formatear antes de crear una lista:

 df['label'].apply(lambda x: '%.17f' % x).values.tolist()