Pandas Menangani Missing Values
Menangani Missing Values menggunakan Pandas, untuk apa? Untuk kemudahan hidup, tentu saja. Karena bertemu dengan missing value adalah hal yang tak terhindarkan dalam dunia olah data. Bahkan, pada kenyataannya, jarang sekali menemukan data yang bersih, siap guna, bebas dari kesalahan dan missing values. Jadi, missing value ini adalah hal yang lumrah dan akan kita temui lagi dan lagi. Untungnya, Pandas sebagai salah satu library andalan kita menawarkan berbagai metode untuk menangani missing value dengan efisien. Mari bermain!
Membuat Data dengan Missing Values
Sebelumnya mari kita buat dulu data untuk petualangan kecil kita kali ini. Sila gunakan kode berikut.
import numpy as np import pandas as pd df = pd.DataFrame({ "Date": pd.date_range(start="2024-1-01", periods=10, freq="D"), "Item": [1014] * 10, "Msatu": np.random.randint(1, 10, size=10), "Mdua": np.random.random(10).round(2), "Mtiga": np.random.random(10).round(2), "Mempat": np.random.random(10).round(2) })
Kode di atas membuat data dummy dengan bantuan fungsi random untuk membuat angka acak dengan ukuran 10 x 6. Output kurang lebih seperti ini.
Kita memiliki dataframe dengan 10 baris dan 6 kolom. Langkah selanjutnya adalah menambahkan missing value pada data. Kita akan menggunakan fungsi loc untuk memilih kombinasi baris dan kolom semedikian rupa sehingga terlihat alami (padahal buatan).
df.loc[[2,9], "Item"] = np.nan df.loc[[2,7,9], "Msatu"] = np.nan df.loc[[2,3], "Mdua"] = np.nan df.loc[[2], "Mtiga"] = np.nan df.loc[:6, "Mempat"] = np.nan
Ada fenomena menarik, kolom Item dan Msatu berubah, dari awalnya data bertipe Integer menjadi Float (pecahan), ditandai dengan “.0” pada hampir semua baris. Hal ini terjadi karena keberadaan missing value pada kolom-kolom tersebut.
Menangani Missing Values pada Pandas
Missing values bahkan dapat membuat tipe data berubah. Sebegitu mengganggunya. Jadi, mari kita elaborasi macam-macam metode untuk menangani missing values, menggunakan Pandas tentu saja.
Menghapus Baris dengan Kolom Kosong
Tindakan menghapus ini adalah pilihan utama banyak orang, karena mudahnya. Cukup gunakan fungsi dropna.
df.dropna(inplace=True)
Dari sepuluh baris data, kenapa hanya satu yang tersisa? Karena hanya baris itulah yang tidak memiliki kolom kosong. Sembilan baris lainnya dihapus oleh fungsi dropna karena memiliki setidaknya satu kolom kosong. Pada fungsi dropna terdapat parameter how, yang bisa gunakan untuk mengatur apakah suatu baris akan dihapus bila memiliki satu kolom kosong, atau dihapus saat semua kolom kosong.
Menghapus Kolom dengan Nilai Kosong
Selain dapat menghapus baris dengan kolom kosong, fungsi dropna juga dapat digunakan untuk menghapus kolom. Cukup memberi nilai 1 pada parameter axis, contohnya seperti ini.
df.dropna(axis=1, inplace=True)
Seperti diduga, hanya kolom yang tidak memiliki baris data kosonglah yang tersisa, yaitu kolom Date. Silahkan elaborasi lebih lanjut dokumentasi fungsi dropna untuk mengetahui parameter apa saja yang tersedia, agar menambah sediaan skenario yang dapat dilakukan saat menggunakan fungsi itu.
Menghapus Baris atau Kolom dengan Nilai Kosong (pada semua bagian)
Kita kembali ke parameter how pada fungsi dropna. Parameter ini dapat diisi dengan dua nilai, ‘all‘ dan ‘any‘. Nilai ‘all‘ berarti hanya menghapus bila semua bagian bernilai kosong, sedang ‘any‘ berarti hapus bahkan bila hanya ada satu bagian bernilai kosong.
# Menghapus baris bila semua bagian (semua kolom pada baris itu) tanpa nilai df.dropna(how='all', inplace=True) # Menghapus kolom bila semua bagian (semua baris pada kolom itu) tanpa nilai df.dropna(axis=1, how='all', inplace=True)
Tidak terlihat ada perubahan, karena memang pada data yang kita gunakan tidak ada baris data yang kosong pada semua kolom (baris kode kedua). Dan tidak ditemukan kolom yang semua baris datanya kosong.
Mengganti Missing Value dengan Nilai Tetap
Bagaimana bila menghapus baris atau kolom bukanlah pilihan? Kita bisa mengganti data kosong itu dengan nilai tertentu, salah satunya dengan nilai konstan.
Pandas menyediakan fungsi fillna yang seperti namanya, bertugas mengisi (fill) na (not available/kosong) dengan nilai lain. Begini kode untuk mengisi na dengan nilai konstan.
df['Item'].fillna(1014, inplace=True) df['Mempat'].fillna(0, inplace=True)
Kode tersebut mengganti semua missing values pada kolom Item dengan 1014, dan pada kolom Mempat dengan 0.
Mengganti Missing Value dengan Nilai Tengah
Adalah praktek yang umum juga untuk mengganti missing values dengan nilai tengah, yaitu nilai rata-rata (mean) atau nilai tengah (median). Metode ini tentu berguna saat berhadapan dengan data numerik.
df['Mdua'].fillna(df['Mdua'].mean(), inplace=True)
Kode tersebut mengganti missing values pada kolom Mdua dengan nilai rata-rata kolom tersebut.
Untuk mengganti missing values dengan nilai tengah (median), gunakan fungsi median, sehingga kode menjadi seperti ini.
df['Mdua'].fillna(df['Mdua'].median(), inplace=True)
Mengisi Missing Value dengan Nilai pada Baris Sebelum atau Setelah
Bisa juga mengisi missing values dengan nilai pada baris sebelum, atau setelah baris bernilai kosong tersebut. Fungsi fillna menyediakan parameter method untuk kebutuhan tersebut. Pilihan yang tersedia adalah bfill (bisa juga backfill), ffill, dan None.
Nilai bfill/backfill membuat nilai kosong diganti dengan nilai setelahnya. Sebagai contoh, hasil dari kode di bawah ini, pada kolom Mtiga baris nomor 2 yang sebelumnya kosong, sekarang bernilai 0.60, sama seperti nilai pada kolom Mtiga baris nomor 3.
df.fillna(method='bfill', limit=1, inplace=True)
Nilai ffill adalah kebalikan dari bfill, yaitu mengganti nilai kosong dengan nilai sebelumnya. Nilai None pada parameter method berarti tidak mengganti nilai kosong dengan nilai sebelum atau setelahnya.
Mengganti dengan Nilai dari DataFrame Lain
Ada lagi pilihan lain, mengganti dataset alias menggunakan dataframe lain. Meski terdengar acuh dan menyepelekan masalah, solusi mengganti dataset adalah pilihan terbaik, bila data yang dimiliki saat ini “terlalu sulit untuk ditolong” 😀
Simpulan
Sangat perlu ditanamkan dalam benak bahwa setinggi apapun harapan Anda terhadap data yang ideal, nilai kosong akan selalu ditemui dalam setiap tugas dan karier Anda. Mengabaikan atau menyepelekan nilai kosong dapat menyebabkan analisis bias dan prediksi model yang tidak akurat.
Penting juga, sebelum bertindak, pahami lawan Anda terlebih dahulu. Memahami alasan di balik missing value, apakah mereka hilang secara acak atau memiliki pola tertentu, atau mungkin sudah saatnya untuk mengganti sumber data Anda, tentu sedikit banyak membantu dalam memilih metode penanganan yang paling tepat.