Ringkasan adalah cara tercepat memahami isi tabel yang panjang. Alih-alih membaca baris demi baris, kita bertanya: berapa totalnya, berapa rata-ratanya, dan berapa nilai tengahnya. Pandas menjawab ketiganya dengan method sum(), mean(), dan median(), yang menghitung agregat per kolom secara default. Sama pentingnya, ketiga method secara default mengabaikan NaN melalui parameter skipna — perilaku yang akan kita buktikan dengan data yang sengaja dibiarkan kosong.
Menyiapkan Data dengan Nilai Kosong #
Kita memakai tabel penjualan bulanan lima cabang toko. Kolom februari sengaja memuat None untuk Jakarta dan Medan, meniru kondisi nyata ketika laporan dari dua cabang belum masuk. Saat DataFrame dibuat, None pada kolom numerik dikonversi menjadi NaN dan membuat kolom februari ber-dtype float64, sedangkan dua kolom lainnya tetap int64.
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.dtypes)
print()
print(penjualan.sum())
print()
print(penjualan.mean())
print()
print(penjualan.median())Output yang Dihasilkan:
januari int64
februari float64
maret int64
dtype: object
januari 550.0
februari 335.0
maret 660.0
dtype: float64
januari 110.000000
februari 111.666667
maret 132.000000
dtype: float64
januari 110.0
februari 105.0
maret 130.0
dtype: float64Mari kita bedah kode dan output di atas:
- Baris 3-10: DataFrame dibuat dengan parameter
indexberisi nama cabang, sehingga setiap baris punya label yang mudah dirujuk. - Baris 12-18: kita mencetak
dtypes, lalu memanggil ketiga method agregasi; tanpa argumen tambahan, ketiganya bekerja per kolom (axis=0) dan mengembalikan Series berlabel nama kolom. - Nilai 550.0 pada hasil
sum()kolomjanuari: 120 + 150 + 90 + 80 + 110 memang 550; penulisan 550.0 terjadi karena hasil agregasi ketiga kolom disatukan ke dtype yang paling umum, yaitufloat64milik kolomfebruari. - Kolom
februari: hanya 95, 105, dan 135 yang dihitung;sum()menghasilkan 335.0,mean()menghasilkan 111.666667 (335 dibagi 3, bukan dibagi 5), danmedian()menghasilkan 105.0, nilai tengah dari 95, 105, 135.
mean() versus median() #
Mean menjumlahkan seluruh nilai lalu membaginya dengan banyaknya data, sehingga satu nilai ekstrem ikut menggeser hasilnya. Median mengurutkan data lalu mengambil nilai tengah, sehingga nilai ekstrem tidak menggeser posisinya. Pada kolom maret, mean dan median sama-sama 130.0 karena datanya relatif seimbang; pada data yang mengandung transaksi luar biasa besar, keduanya bisa jauh berbeda. Kebiasaan yang sehat adalah menghitung keduanya lalu membandingkan: selisih yang besar adalah sinyal adanya pencilan yang patut ditelusuri.
skipna: Default yang Mengabaikan NaN #
Parameter skipna mengatur sikap method agregasi terhadap NaN, dan defaultnya True. Artinya, method melewatkan sel kosong lalu menghitung sisa data yang terisi. Ketika kita menggantinya menjadi skipna=False, satu saja NaN pada kolom membuat seluruh hasil agregasi kolom itu menjadi NaN, karena hasil perhitungan yang memuat data hilang dianggap tidak valid.
import pandas as pd
februari = pd.Series(
[135, None, 105, 95, None],
index=["Bandung", "Jakarta", "Surabaya", "Denpasar", "Medan"],
)
print(februari.sum())
print(februari.sum(skipna=False))
print(februari.mean())
print(februari.mean(skipna=False))
print(februari.median())
print(februari.median(skipna=False))Output yang Dihasilkan:
335.0
nan
111.66666666666667
nan
105.0
nanOutput di atas memperlihatkan kontrasnya secara berurutan: sum() biasa menghasilkan 335.0, sedangkan sum(skipna=False) menghasilkan nan; pola yang sama berlaku pada mean() dan median(). Perilaku ini identik ketika method dipanggil pada DataFrame, bukan hanya pada Series tunggal.
Referensi resmi untuk chapter ini mencakup pandas.Series.sum , pandas.Series.mean , dan pandas.Series.median ; perilaku terhadap data kosong dirinci pada halaman Working with missing data .
Total, rata-rata, dan median memberi gambaran tentang pusat data. Ringkasan belum lengkap tanpa mengetahui batasnya: penjualan terendah, tertinggi, dan banyaknya data yang benar-benar terisi. Chapter berikutnya menutup kebutuhan itu dengan tiga method sederhana: min(), max(), dan count().