Section ini hampir selesai dan semua visual sejauh ini berupa gambar dari .plot. Untuk laporan bisnis, tabel itu sendiri juga bisa menjadi visual: angka dengan pemisah ribuan, kolom bergradasi warna mengikuti besaran nilai, dan bar di dalam sel. pandas menyediakan perangkat itu lewat properti .style, yang mengembalikan objek Styler — pembungkus DataFrame yang menerjemahkan nilai menjadi HTML dan CSS. Styler tidak mengubah data sedikit pun; semua format adalah lapisan tampilan di atas nilai asli. Chapter ini membahas format(), bar(), background_gradient(), set_caption() dengan hide(), serta ekspor tabel bergaya ke Excel dan HTML.
Format Angka dengan format() #
Method format() menerima dictionary yang memetakan nama kolom ke format string Python. Format "Rp{:,.0f}" menambahkan awalan Rp, pemisah ribuan koma, dan membuang desimal, sedangkan "{:,}" hanya menambahkan pemisah ribuan. Untuk memeriksa hasil tanpa browser, objek Styler punya method to_string() yang merender tabel terformat sebagai teks — angka omzet tampil sebagai Rp5,400,000 bukan 5400000. Nilai di dalam DataFrame tidak berubah; penjualan tetap menyimpan integer, dan hanya representasi tampilannya yang dimodifikasi.
import os
import tempfile
import pandas as pd
penjualan = pd.DataFrame(
{
"produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Susu UHT"],
"unit": [120, 85, 60, 200],
"omzet": [5_400_000, 3_570_000, 1_920_000, 4_800_000],
}
)
# format(): tampilan angka diubah, nilai aslinya tetap
styled = penjualan.style.format({"omzet": "Rp{:,.0f}", "unit": "{:,}"})
print(styled.to_string())
# bar(): panjang bar mengikuti besaran nilai kolom
html_bar = (
penjualan.style.set_uuid("bar-1")
.bar(subset=["unit"], color="#76b7b2")
.hide(axis="index")
.to_html()
)
print("\njumlah bar linear-gradient:", html_bar.count("linear-gradient"))
# background_gradient(): warna mengikuti besaran nilai
html_grad = (
penjualan.style.set_uuid("grad-1")
.background_gradient(subset=["omzet"], cmap="Greens")
.to_html()
)
print("jumlah sel berwarna:", html_grad.count("background-color:"))
# set_caption() dan hide() merapikan kerangka tabel laporan
dengan_judul = (
penjualan.style.set_uuid("judul-1")
.set_caption("Ringkasan Penjualan Q1 2026")
.hide(axis="index")
)
print("caption tampil di HTML:", "<caption>" in dengan_judul.to_html())
# Ekspor laporan bergaya ke Excel lalu baca kembali
with tempfile.TemporaryDirectory() as tmp:
path = os.path.join(tmp, "laporan_penjualan.xlsx")
penjualan.style.format({"omzet": "Rp{:,.0f}"}).to_excel(
path, engine="openpyxl"
)
kembali = pd.read_excel(path, index_col=0)
print(kembali)Output yang Dihasilkan:
produk unit omzet
0 Kopi Gayo 120 Rp5,400,000
1 Teh Melati 85 Rp3,570,000
2 Gula Aren 60 Rp1,920,000
3 Susu UHT 200 Rp4,800,000
jumlah bar linear-gradient: 4
jumlah sel berwarna: 4
caption tampil di HTML: True
produk unit omzet
0 Kopi Gayo 120 5400000
1 Teh Melati 85 3570000
2 Gula Aren 60 1920000
3 Susu UHT 200 4800000Mari kita telaah baris-baris kuncinya:
- Baris 15-16:
penjualan.style.format({...})membuat objek Styler dengan aturan format per kolom;to_string()merendernya sebagai teks rapi. - Baris 19-25: rantai
set_uuid("bar-1").bar(...).hide(axis="index")menghasilkan HTML;to_html()merender tabel ke string HTML, dancount("linear-gradient")menghitung empat bar untuk empat sel kolomunit. - Baris 28-34:
background_gradient(subset=["omzet"], cmap="Greens")memberi warna latar tiap sel mengikuti besaran nilainya; hitunganbackground-color:juga empat. - Baris 37-41:
set_caption("Ringkasan Penjualan Q1 2026")menambahkan elemen<caption>di HTML, dibuktikan lewat pemeriksaan keanggotaan string. - Baris 44-51: rantai
.format(...).to_excel(...)mengekspor laporan bergaya ke berkas Excel di direktori sementara, laluread_excelmembaca kembali isinya.
Warna dan Bar di Dalam Sel #
bar() menggambar bar horizontal di dalam sel dengan lebar proporsional terhadap nilai terbesar kolom, sehingga perbandingan antarbaris terbaca sekilas tanpa grafik terpisah. background_gradient() menerapkan colormap Matplotlib — parameter cmap="Greens" memakai gradasi hijau — dan hanya menyentuh kolom yang disebut lewat subset. Keduanya bekerja pada lapisan CSS: setiap sel mendapat gaya background sesuai nilai, dan hasil akhirnya adalah tabel HTML yang siap disematkan ke laporan web. Styler menandai tabel dengan id CSS acak; contoh menetapkannya lewat set_uuid() agar keluaran buku ini stabil di setiap eksekusi.
Ekspor Laporan ke Excel dan HTML #
Objek Styler punya dua jalur ekspor utama: to_excel() dan to_html(). Ekspor Excel mempertahankan nilai aslinya — kolom omzet terbaca kembali sebagai integer 5400000, bukan string berformat — sehingga penerima laporan tetap bisa menghitung ulang. Perlu diingat hide(axis="index") hanya menyembunyikan index pada tampilan HTML; saat mengekspor, index tetap tertulis di berkas, dan contoh membaca kembali dengan index_col=0 agar kolom tambahan tidak muncul. Method to_html() menghasilkan string HTML lengkap dengan CSS di dalamnya, siap disematkan ke halaman web atau email laporan.
Styler membuka satu kemampuan yang belum kita sentuh: backend di balik lapisan render bisa diganti. Chapter berikutnya mengganti mesin .plot ke Plotly sehingga grafik yang sama tampil interaktif di browser — penutup section Visualisasi Data.
Dokumentasi resmi yang relevan: pandas.DataFrame.style untuk membuat objek Styler, User Guide: Table Visualization yang merinci seluruh kemampuan styling, dan pandas.io.formats.style.Styler sebagai referensi lengkap method-nya.