Format tabel panda

Jika Anda belum tahu bagaimana mengirimkan data secara langsung ke pelanggan di alam bawah sadar atau, paling buruk, teks pesan yang terkendala, Anda akan membutuhkan informasi tentang bagaimana membuat proses interpretasi tabel lebih cepat dan nyaman.



Misalnya, excel menggunakan pemformatan bersyarat dan grafik mini untuk ini . Dan di artikel ini kita akan melihat bagaimana memvisualisasikan data menggunakan Python dan pustaka pandas: kita akan menggunakan properti DataFrame.styledan Options and settings.



Menyiapkan rendering dasar



Kami mengimpor perpustakaan: pandasuntuk bekerja dengan data dan seabornuntuk memuat set data klasik penguins:



import pandas as pd
import seaborn as sns


Gunakan untuk pd.set_optionmengkonfigurasi keluaran sehingga:



  • jumlah baris pada tabel tidak lebih dari 5;
  • teks di dalam sel tercermin sepenuhnya terlepas dari panjangnya (ini berguna jika sel memiliki judul atau URL panjang yang ingin Anda lihat);
  • semua angka direfleksikan dengan dua tempat desimal;


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


Mari baca dan lihat kerangka data.



penguins = sns.load_dataset(‘penguins’)
penguins


gambar



Jika Anda perlu mengembalikan pengaturan ke default, gunakan pd.reset_option. Misalnya seperti ini, jika kita ingin mengupdate semua pengaturan sekaligus:



pd.reset_option('all')


Daftar lengkap properti set_option.



Menyiapkan tampilan data dalam tabel



Format angka, celah dan kapitalisasi



Dataframe pandasmemiliki properti DataFrame.styleyang mengubah tampilan isi sel dengan kondisi baris atau kolom.



, , .



(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()
         })
)


gambar



, , ₽ :



(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)
)


gambar



, 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')
)


gambar



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'),
                 )
             )


gambar



, , - , .



. , ?! -, , .



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


gambar



background_gradient :



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




Memformat tabel pandasdengan DataFrame.styledan Options and settingsmembuat hidup lebih mudah, atau setidaknya meningkatkan keterbacaan kode dan laporan. Namun pengolahan tipe data, gap dan register lebih baik tentunya dilakukan dengan sengaja sebelum tahap visualisasi.



Selain itu, Anda dapat menangani:



  • Ekspor ke excel ;
  • Fungsi asli untuk pemformatan bersyarat. Kami menggunakan fungsi bawaan highlight_max, highlight_mindan highlight_null, tetapi untuk kondisi yang lebih rumit, Anda dapat menulis sendiri;
  • Perpustakaan ini seperti sparklinesdan PrettyPandas.



All Articles