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.

Pandas Menangani Missing Values

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
Pandas Menangani Missing Values

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)
Pandas menangani Missing Values dengan dropna

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)
Pandas Menangani Missing Values dengan Menghapus Kolom Kosong

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)
Pandas Menangani Missing Values

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.

Pandas Menangani Missing Values dengan Nilai Konstan

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.

Pandas Menangani Missing Values dengan Nilai Tengah

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)
Pandas Menangani Missing Values

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.

Leave a Reply

Your email address will not be published. Required fields are marked *