Format de table Pandas

Si vous ne savez pas encore comment transmettre des données directement au client dans le subconscient ou, au pire, le texte du message en relâche, vous aurez besoin d'informations sur la façon de rendre le processus d'interprétation des tableaux plus rapide et plus confortable.



Par exemple, Excel utilise la mise en forme conditionnelle et les graphiques sparkline pour cela . Et dans cet article, nous verrons comment visualiser des données à l'aide de Python et de la bibliothèque pandas: nous utiliserons les propriétés DataFrame.styleet Options and settings.



Configuration du rendu de base



Nous importons des bibliothèques: pandaspour travailler avec des données et seabornpour charger un jeu de données classique penguins:



import pandas as pd
import seaborn as sns


Utilisez pour pd.set_optionconfigurer la sortie afin que:



  • le nombre de lignes du tableau n'était pas supérieur à 5;
  • le texte dans la cellule était entièrement reflété quelle que soit la longueur (cela est pratique si la cellule a un long titre ou une URL que vous souhaitez voir);
  • tous les nombres ont été reflétés avec deux décimales;


pd.set_option('max_rows', 5)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.float_format', '{:.2f}'.format)


Lisons et voyons le dataframe.



penguins = sns.load_dataset(‘penguins’)
penguins


image



Si vous devez rétablir les paramètres par défaut, utilisez pd.reset_option. Par exemple, comme ceci, si nous voulons mettre à jour tous les paramètres à la fois:



pd.reset_option('all')


Liste complète des propriétés set_option.



Configuration de l'affichage des données dans les tableaux



Format des nombres, lacunes et cas



Les dataframes pandasont une propriété DataFrame.stylequi modifie l'affichage du contenu des cellules par condition pour les lignes ou les colonnes.



, , .



(penguins
 .head(5)
 .style
 .format('{:.1f}', na_rep='-')
 .format({'species': lambda x:x.lower(),
          'island': lambda x:x.lower(),
          'sex': lambda x: '-' if pd.isna(x) else x.lower()
         })
)


image



, , ₽ :



(df
.style
.format({'price': '₽{:.2f}'})
)


— !



(, , )



, , , . subset.



numeric_columns = ['bill_length_mm',
                   'bill_depth_mm',
                   'flipper_length_mm',
                   'body_mass_g']


, 5 .



(penguins
 .head(5)
 .style
 .format('{:.1f}', na_rep='-')
 .format({'species': lambda x:x.lower(),
          'island': lambda x:x.lower(),
          'sex': lambda x: '-' if pd.isna(x) else x.lower()
         })
 .highlight_null(null_color='lightgrey')
 .highlight_max(color='yellowgreen', subset=numeric_columns)
 .highlight_min(color='coral', subset=numeric_columns)
)


image



, 5 2 (!) .



: - Adelie.



Bar chart



, Adelie .



adelie_female = (penguins[(penguins['species'] == 'Adelie') & 
                          (penguins['sex'] == 'FEMALE')]
                 .copy()
                )

adelie_female['flipper_l_var'] = ((adelie_female['flipper_length_mm']- 
                                                 adelie_female['flipper_length_mm'].mean()).round())


, 'flipper_l_var'. :



  • (subset), ;
  • (align): mid — , , . ;
  • (color). 2 : ;
  • (vmin, vmax).


set_properties , 'flipper_l_var' .



(adelie_female
 .head(5)
 .style
 .format('{:.1f}', na_rep='-')
 .format({'species': lambda x:x.lower(),
          'island': lambda x:x.lower(),
          'sex': lambda x: '-' if pd.isna(x) else x.lower()
         })
 .bar(subset=['flipper_l_var'],
      align='mid',
      color=['coral', 'yellowgreen'],
      vmin=adelie_female['flipper_l_var'].min(),
      vmax=adelie_female['flipper_l_var'].max()
     )
 .set_properties(**{'text-align': 'center'}, subset='flipper_l_var')
)


image



Heatmap



. , .



, .



species_stat=(penguins
             .groupby('species')
             .agg(penguins_count=('species','count'),
                  mean_bill_length=('bill_length_mm', 'mean'),
                  mean_bill_depth=('bill_depth_mm', 'mean'),
                  mean_flipper_length=('flipper_length_mm', 'mean'),
                  mean_body_mass=('body_mass_g', 'mean'),
                 )
             )


image



, , - , .



. , ?! -, , .



(species_stat
 .T
 .style
 .format("{:.1f}")
 .background_gradient(cmap='Blues', axis=1)
)


image



background_gradient :



  • (cmap): Blues. ;
  • (axis=1).




Le formatage des tableaux pandasavec DataFrame.styleet Options and settingsfacilite la vie, ou du moins améliore la lisibilité du code et des rapports. Mais il est bien entendu préférable que le traitement des types de données, des lacunes et du registre soit effectué consciemment avant même le stade de la visualisation.



De plus, vous pouvez traiter:



  • Exporter pour exceller ;
  • Fonctions natives pour la mise en forme conditionnelle. Nous avons utilisé des fonctions intégrées highlight_max, highlight_minet highlight_null, mais pour des conditions plus sophistiquées, vous pouvez écrire votre propre;
  • Ces bibliothèques aiment sparklineset PrettyPandas.



All Articles