Penjelasan sederhana
Sel kosong bisa membuat hitungan meleset. isna() menandai setiap sel kosong dengan True, dan karena True dihitung 1, sum() langsung memberi jumlah sel kosong tiap kolom.
Sintaks
df.isna().sum()
df[df['kolom'].isna()]
df adalah nama DataFrame (tabel) yang sedang diolah. Contoh di bawah memakai import pandas as pd dan import numpy as np, yang sudah disiapkan otomatis.
Contoh isna()
Data contoh: karyawan (sudah tersedia sebagai DataFrame)
DataFrame karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id |
|---|---|---|---|---|---|---|
| 1 | Andi Pratama | 3 | Bandung | 12500000 | 2019-03-11 | NaN |
| 2 | Bunga Lestari | 1 | Jakarta | 9800000 | 2020-07-01 | NaN |
| 3 | Candra Wijaya | 3 | Bandung | 8200000 | 2021-02-15 | 1 |
| 4 | Dewi Anggraini | 2 | Jakarta | 7500000 | 2022-05-09 | 6 |
| 5 | Eko Saputra | 1 | Jakarta | 6900000 | 2023-01-16 | 2 |
| 6 | Fajar Nugroho | 2 | Surabaya | 11000000 | 2018-09-03 | NaN |
| 7 | Gita Permata | 3 | Jakarta | 8200000 | 2023-08-21 | 1 |
| 8 | Hendra Gunawan | NaN | Medan | 5500000 | 2024-04-02 | NaN |
print(karyawan.isna().sum())
karyawan[karyawan['dept_id'].isna()]
id 0 nama 0 dept_id 1 kota 0 gaji 0 tgl_masuk 0 atasan_id 4 dtype: int64
Hasil 1 baris × 7 kolom
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id | |
|---|---|---|---|---|---|---|---|
| 7 | 8 | Hendra Gunawan | NaN | Medan | 5500000 | 2024-04-02 | NaN |
Kolom abu-abu adalah index, yaitu nomor baris asli di tabel. Nomornya tidak urut karena ada baris yang disaring atau diurutkan. Apa itu index?
Kolom dept_id kosong 1 dan atasan_id kosong 4. Baris yang dept_id-nya kosong adalah Hendra Gunawan.
Cara kerjanya, langkah demi langkah
isna()mengubah setiap sel menjadi True (kosong) atau False (terisi).sum()menjumlahkan True per kolom.karyawan[karyawan['dept_id'].isna()]mengambil baris yang dept_id-nya kosong.
Dipakai untuk apa di kantor?
- Audit kualitas data sebelum analisis.
- Mencari pelanggan tanpa nomor HP atau transaksi tanpa kategori.
Kesalahan yang sering terjadi
- Mengecek kosong dengan
== Noneatau== np.nan. Hasilnya selalu False; pakaiisna(). - Teks kosong "" tidak dianggap NaN. Ubah dulu dengan
replace('', np.nan).
fillna()