web-dev-qa-db-fra.com

Formater / Supprimer la notation scientifique de Python Pandas Résultats d'agrégation

Comment modifier le format de sortie d'une opération groupby dans pandas produisant une notation scientifique pour de très grands nombres?

Je sais comment formater une chaîne dans python, mais je ne sais pas trop comment l'appliquer ici.

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

Ceci supprime la notation scientifique si je convertis en chaîne, mais maintenant je me demande simplement comment formater une chaîne et ajouter des décimales.

sum_sales_dept.astype(str)
110
horatio1701d

Certes, la réponse que j'ai liée dans les commentaires n'est pas très utile. Vous pouvez spécifier votre propre convertisseur de chaîne comme ceci.

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

Je ne suis pas sûr que ce soit la façon préférée de le faire, mais cela fonctionne.

Convertir des nombres en chaînes uniquement à des fins esthétiques semble être une mauvaise idée, mais si vous avez une bonne raison, procédez comme suit:

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
178
Dan Allan

Voici une autre façon de le faire, similaire à réponse de Dan Allan mais sans la fonction lambda:

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

ou

>>> pd.set_option('display.float_format', '{:.2f}'.format)
57
tfhans

Vous pouvez utiliser la fonction round uniquement pour supprimer la notation scientifique pour une image donnée:

df1.round(4)

ou vous pouvez supprimer est globalement par:

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

Si vous souhaitez styliser la sortie d'un bloc de données dans une cellule du bloc-notes Jupyter, vous pouvez définir le style d'affichage par base de données:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

enter image description here

Voir la documentation ici .

3
florestan

Si vous souhaitez utiliser les valeurs, disons dans le cadre de csvfile csv.writer, les nombres peuvent être formatés avant la création d'une liste:

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