Setelah pusat data diringkas dengan mean dan median, langkah pemeriksaan berikutnya adalah memeriksa batas dan kelengkapan. min() dan max() mencari nilai terkecil dan terbesar di setiap kolom, sedangkan count() menghitung banyaknya sel yang benar-benar terisi. Ketiganya berdampingan saat pemeriksaan kualitas data: rentang nilai yang wajar perlu diketahui sebelum kita memutuskan data mana yang perlu dibersihkan. Chapter ini memakai dataset penjualan cabang yang sama dengan chapter sebelumnya, termasuk dua nilai NaN di kolom februari.
min() dan max() per Kolom #
Method min() dan max() bekerja per kolom secara default dan mengembalikan Series berlabel nama kolom. Pada kolom yang berisi NaN, keduanya mengabaikan sel kosong secara default sehingga hasilnya tetap angka yang bermakna. Mari kita jalankan ketiga method pemeriksaan pada dataset penjualan cabang.
import pandas as pd
penjualan = pd.DataFrame(
{
"januari": [120, 150, 90, 80, 110],
"februari": [135, None, 105, 95, None],
"maret": [150, 160, 120, 100, 130],
},
index=["Bandung", "Jakarta", "Surabaya", "Denpasar", "Medan"],
)
print(penjualan.min())
print()
print(penjualan.max())
print()
print(penjualan.count())
print()
print(penjualan["februari"].min(skipna=False))
print(penjualan["maret"].idxmax())
print(penjualan["maret"].idxmin())Output yang Dihasilkan:
januari 80.0
februari 95.0
maret 100.0
dtype: float64
januari 150.0
februari 135.0
maret 160.0
dtype: float64
januari 5
februari 3
maret 5
dtype: int64
nan
Jakarta
DenpasarMari kita baca output di atas per bagian:
- Baris 3-10: dataset lima cabang dengan kolom
februariyang memuat dua NaN. - Baris 12-15:
min()menghasilkan 80.0, 95.0, dan 100.0, sedangkanmax()menghasilkan 150.0, 135.0, dan 160.0; seluruh hasil ber-dtypefloat64karena kolomfebruariber-dtypefloat64, meskipun nilaijanuaridanmaretberasal dari kolomint64. - Nilai 95.0 pada
min()kolomfebruari: hanya tiga nilai terisi (95, 105, 135) yang dibandingkan; dua NaN dilewati, bukan diperlakukan sebagai nol. - Baris 16-20:
count()menghitung sel terisi per kolom,min(skipna=False)memperlihatkan akibat mematikan skipna, danidxmax()sertaidxmin()mencari label pemilik nilai ekstrem.
skipna pada min() dan max() #
Seperti method agregasi lain, min() dan max() menerima parameter skipna dengan default True. Menggantinya menjadi skipna=False membuat hasil langsung menjadi nan pada kolom yang punya NaN, karena pandas tidak menyatakan nilai terkecil dari data yang tidak lengkap. Aturan ini konsisten dengan sum() dan mean() yang kita bahas sebelumnya, sehingga setelan skipna dapat dibaca sebagai satu kontrak yang sama untuk semua method agregasi.
Mencari Label Pemilik Nilai Ekstrem #
idxmax() dan idxmin() melengkapi max() dan min() dengan mengembalikan label index pemilik nilai, bukan nilainya. Pada kolom maret, idxmax() mengembalikan Jakarta dan idxmin() mengembalikan Denpasar, sehingga pertanyaan cabang mana yang penjualannya paling tinggi terjawab tanpa pencarian manual. Keduanya juga memakai skipna=True secara default, sehingga baris yang kosong tidak pernah terpilih sebagai pemilik nilai ekstrem.
count(): Menghitung Sel Terisi #
Method count() menghitung banyaknya sel non-NaN per kolom dan mengembalikan hasil int64. Pada dataset kita, kolom januari dan maret menghasilkan 5, sedangkan kolom februari hanya 3 dari 5 baris yang terisi. Berbeda dari min() dan max(), method count() tidak memiliki parameter skipna sama sekali, karena definisinya memang menghitung sel yang tidak kosong.
Referensi resmi chapter ini: pandas.Series.min , pandas.Series.max , dan pandas.DataFrame.count ; penanganan data kosong dirinci pada Working with missing data .
Nilai ekstrem dan kelengkapan data hanyalah dua sisi dari deskripsi data. Ukuran yang lebih informatif untuk membandingkan antar kolom adalah sebaran: seberapa jauh nilai-nilai menyebar dari pusatnya. Chapter berikutnya membahas dua ukuran sebaran yang paling sering dipakai, yaitu variance dan standard deviation. Sebelum itu, pertanyaan berbentuk daftar teratas — bukan satu pemenang — dibahas pada chapter Peringkat dan Top-N yang menyambung langsung dari idxmax() menuju rank(), nlargest(), dan nsmallest().