Le Format de certaines flottant dataframe colonnes en pourcentage dans les pandas
Je suis en train d'écrire un papier dans IPython notebook, mais a rencontré quelques problèmes avec le format d'affichage. Dire que j'ai suivantes dataframe df
, est-il un moyen de formater var1
et var2
en 2 chiffres décimaux et var3
en pourcentages.
var1 var2 var3
id
0 1.458315 1.500092 -0.005709
1 1.576704 1.608445 -0.005122
2 1.629253 1.652577 -0.004754
3 1.669331 1.685456 -0.003525
4 1.705139 1.712096 -0.003134
5 1.740447 1.741961 -0.001223
6 1.775980 1.770801 -0.001723
7 1.812037 1.799327 -0.002013
8 1.853130 1.822982 -0.001396
9 1.943985 1.868401 0.005732
Les chiffres à l'intérieur ne sont pas multipliés par 100, par exemple -0.0057=-0.57%.
- Dans le cas où si quelqu'un est à la recherche à cette question après 2014, regardez ma réponse pour une réponse concise.
Vous devez vous connecter pour publier un commentaire.
remplacer les valeurs à l'aide de la fonction round, et le format de la représentation sous forme de chaîne les chiffres de pourcentage:
La fonction round arrondit un nombre à virgule flottante pour le nombre de décimales à condition que le deuxième argument de la fonction.
Chaîne de mise en forme permet de représenter les nombres que vous le souhaitez. Vous pouvez modifier le nombre de décimales indiqué en changeant le nombre de chiffres avant la
f
.p.s. Je n'étais pas sûr si votre pourcentage nombre avait déjà été multiplié par 100. Si ils l'ont clairement vous souhaitez modifier le nombre de décimales affichées, et de supprimer les centaines de multiplication.
df['var2'].round(2)
La accepté de répondre suggère de modifier les données brutes pour les besoins de la présentation, quelque chose en général, vous ne voulez pas. Imaginez que vous ayez besoin de faire d'autres analyses avec ces colonnes et vous avez besoin de la précision que vous avez perdu avec l'arrondissement.
Vous pouvez modifier la mise en forme des colonnes individuelles dans des trames de données, dans votre cas:
Pour votre information
'{:,.2%}'.format(0.214)
rendements21.40%
, donc pas besoin d'en multipliant le résultat par 100.Vous n'avez pas un joli tableau HTML, mais plus d'une représentation de texte. Si vous avez besoin de rester avec HTML, utilisez la
to_html
fonction de la place.Mise à jour
Comme des pandas 0.17.1, la vie est plus facile et on peut obtenir un beau tableau html tout de suite:
Vous pouvez également définir le format par défaut pour float :
df.pct_change()
):pd.options.display.float_format = '{:.2%}'.format
Comme suggéré par @linqu vous ne devez pas modifier vos données à des fins de présentation. Depuis pandas 0.17.1, (conditionnelle) de mise en forme a été rendue plus facile. Citant le la documentation:
Pour votre exemple, qui serait (l'habituel tableau s'affichera dans Jupyter):
Juste une autre façon de faire devrait vous besoin de le faire sur une plus grande gamme de colonnes
à l'aide de applymap
applymap est utile si vous avez besoin d'appliquer la fonction sur plusieurs colonnes; il s'agit essentiellement d'une abréviation de la ci-dessous pour cet exemple précis:
Grande explication ci-dessous de les appliquer, carte applymap:
La différence entre la carte, applymap et d'appliquer des méthodes dans les Pandas
Viens de faire:
Donne:
Comme une approche similaire pour la accepté de réponse qui pourrait être considéré comme un peu plus lisible, élégante, et en général (YMMV), vous pouvez tirer parti de la
map
méthode:En terme de Performance, c'est assez proche (un peu lent) que l'OP solution.
En aparté, si vous ne choisissez d'aller de l'
pd.options.display.float_format
route, pensez à utiliser un gestionnaire de contexte pour gérer l'état par ce en parallèle numpy exemple.