Menghapus Nilai yang Hilang
Hapus baris atau kolom yang berisi NaN dengan dropna(), sambil mengatur ambang batas dan subset kolom yang diperiksa.
Menghapus Nilai yang Hilang adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Kapan Nilai yang Hilang Harus Dihapus?
Menghapus baris yang memiliki nilai hilang adalah strategi imputasi paling sederhana, tetapi hanya valid ketika data bersifat Missing Completely At Random (MCAR) — artinya, kemungkinan suatu nilai hilang tidak berkaitan dengan nilai yang hilang itu sendiri maupun variabel lainnya. Jika data yang hilang bersifat sistematis (misalnya, responden berpenghasilan rendah melewatkan kolom gaji), menghapusnya akan menimbulkan bias. Selalu selidiki pola nilai yang hilang sebelum memutuskan untuk menghapusnya.
import pandas as pd
import numpy as np
# Example: randomly missing salary data (MCAR-like)
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'salary': [50000, np.nan, 70000, np.nan]
})
print('Before drop:', df.shape) # (4, 2)
print(df)dropna() — Penggunaan Dasar
DataFrame.dropna() secara bawaan menghapus setiap baris yang mengandung setidaknya satu nilai NaN. Fungsi ini mengembalikan DataFrame baru; data asli tidak berubah kecuali Anda meneruskan inplace=True. Untuk kumpulan data kecil hingga sedang, perilaku bawaan ini sering kali dapat diterima sebagai langkah awal pembersihan data yang cepat.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, 3, np.nan],
'b': [10, 20, np.nan, 40],
'c': [100, 200, 300, 400]
})
cleaned = df.dropna()
print(cleaned)
# a b c
# 0 1.0 10.0 100
print('Original shape:', df.shape) # (4, 3)
print('Cleaned shape:', cleaned.shape) # (1, 3)how='all' — Hanya Menghapus Baris yang Seluruhnya NaN
Meneruskan how='all' memberi tahu dropna untuk menghapus baris hanya jika setiap nilai dalam baris tersebut adalah NaN. Ini jauh lebih sedikit menghapus data dibandingkan how='any' yang merupakan bawaan. Gunakan how='all' ketika kumpulan data Anda memiliki baris yang jarang terisi — baris yang memiliki sebagian data layak dipertahankan, sedangkan baris yang sepenuhnya kosong jelas merupakan catatan sampah.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, np.nan],
'b': [2, np.nan, np.nan],
'c': [3, 4, np.nan]
})
# Row 2 has ALL NaN — dropped
# Row 1 has partial NaN — kept with how='all'
cleaned = df.dropna(how='all')
print(cleaned)
# a b c
# 0 1.0 2.0 3.0
# 1 NaN NaN 4.0subset= — Hanya Memeriksa Kolom Tertentu
Parameter subset membatasi kolom mana yang diperiksa untuk NaN saat menentukan apakah suatu baris akan dihapus. Ini sangat berguna ketika hanya kolom tertentu yang penting — misalnya, suatu baris harus dihapus jika kolom user_id atau target hilang, tetapi NaN pada kolom fitur opsional masih dapat diterima.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user_id': [1, np.nan, 3],
'score': [88, 95, np.nan],
'notes': ['ok', 'good', np.nan]
})
# Drop row only if user_id is missing — score and notes NaN are ok
cleaned = df.dropna(subset=['user_id'])
print(cleaned)
# user_id score notes
# 0 1.0 88.0 ok
# 2 3.0 NaN NaNthresh= — Persyaratan Minimum Nilai Tidak Null
Parameter thresh mempertahankan baris hanya jika baris tersebut memiliki setidaknya thresh nilai yang bukan NaN. Ini lebih fleksibel daripada how='any' atau how='all': Anda dapat menyatakan, 'pertahankan baris jika setidaknya 3 dari 5 kolom memiliki data'. Ini berguna untuk kumpulan data yang memang diharapkan memiliki sedikit kekosongan, tetapi baris yang sepenuhnya kosong tetap harus dihapus.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, np.nan],
'b': [2, 3, np.nan],
'c': [4, np.nan, np.nan],
'd': [5, 6, np.nan]
})
# Keep rows with at least 3 non-null values
cleaned = df.dropna(thresh=3)
print(cleaned)
# a b c d
# 0 1.0 2.0 4.0 5.0
# 1 NaN 3.0 NaN 6.0Menghapus Kolom, Bukan Baris
Secara bawaan, dropna() menghapus baris (axis=0). Teruskan axis=1 (atau axis='columns') untuk menghapus kolom yang mengandung NaN, bukan baris. Ini sesuai ketika suatu kolom sebagian besar kosong dan hanya memberikan sedikit informasi — mempertahankannya hanya akan menambahkan gangguan pada model atau tabel ringkasan.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3],
'name': ['A', 'B', 'C'],
'temp': [np.nan, np.nan, np.nan], # completely empty column
'score': [80, 90, 85]
})
# Drop columns that have any NaN
cleaned = df.dropna(axis=1)
print(cleaned)
# id name score
# 0 1 A 80
# 1 2 B 90
# 2 3 C 85Menghapus Kolom Berdasarkan Ambang Nilai yang Hilang
Pola yang ampuh adalah menghapus kolom yang melampaui persentase nilai yang hilang tertentu. Hitung fraksi nilai yang hilang per kolom, identifikasi kolom yang berada di atas ambang Anda (misalnya, 50%), lalu hapus kolom tersebut dengan df.drop(columns=cols_to_drop). Cara ini lebih terarah daripada dropna(axis=1), yang menghapus kolom apa pun yang bahkan memiliki satu NaN.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 2, np.nan, 4, 5],
'b': [np.nan, np.nan, np.nan, np.nan, 5], # 80% missing
'c': [1, np.nan, 3, 4, 5] # 20% missing
})
threshold = 0.5
high_missing = df.columns[df.isna().mean() > threshold]
print('Dropping:', high_missing.tolist()) # ['b']
cleaned = df.drop(columns=high_missing)
print(cleaned)Mempertahankan Indeks Setelah dropna()
Setelah memanggil dropna(), indeks baris asli tetap dipertahankan — jadi jika baris 1 dan 3 dihapus, DataFrame yang tersisa memiliki indeks 0, 2, 4. Hal ini sering kali diinginkan (Anda dapat melacak kembali posisi asli), tetapi terkadang Anda menginginkan indeks berurutan yang dimulai dari 0. Panggil .reset_index(drop=True) setelah penghapusan untuk memberi nomor ulang pada baris.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'val': [1, np.nan, 3, np.nan, 5]
})
cleaned = df.dropna()
print('With original index:')
print(cleaned) # indices 0, 2, 4
cleaned_reset = cleaned.reset_index(drop=True)
print('With reset index:')
print(cleaned_reset) # indices 0, 1, 2dropna() dalam Alur Kerja
Karena dropna() mengembalikan DataFrame, fungsi ini dapat diintegrasikan secara alami ke dalam rantai metode. Merangkai dropna() di antara langkah pemuatan dan analisis adalah pola yang rapi untuk menjaga alur kerja tetap mudah dibaca tanpa variabel sementara. Anda juga dapat merangkainya dengan query(), assign(), dan groupby().
import pandas as pd
import numpy as np
df = pd.DataFrame({
'region': ['East', 'West', None, 'East'],
'revenue': [100, np.nan, 300, 400]
})
result = (
df
.dropna(subset=['region', 'revenue'])
.groupby('region')['revenue'].sum()
)
print(result)
# region
# East 500.0
# dtype: float64Kapan Tidak Boleh Menghapus: Pilih Pengisian
Menghapus baris berarti kehilangan data. Untuk kolom dengan kurang dari 5–10% nilai yang hilang, mengisi (imputasi) biasanya lebih baik daripada menghapusnya. Selain itu, jika nilai yang hilang berkorelasi dengan variabel target (Missing Not At Random, MNAR), menghapusnya akan menimbulkan bias. Sebagai aturan umum: hapus hanya jika nilai yang hilang benar-benar acak, kumpulan data cukup besar sehingga baris yang hilang tidak berpengaruh, dan kolom atau baris tersebut tidak memberikan informasi yang dapat dipulihkan.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, np.nan, 30, np.nan]
})
missing_pct = df['age'].isna().mean()
print(f'Missing age: {missing_pct:.0%}') # 50%
# 50% missing is high — consider imputing instead of dropping
# df['age'].fillna(df['age'].median(), inplace=True)Alur Kerja Pembersihan Praktis
Alur kerja praktis untuk menangani nilai yang hilang menggabungkan beberapa strategi dropna: pertama, hapus baris yang sepenuhnya kosong; kemudian, hapus kolom yang lebih dari 60% bagiannya kosong; setelah itu, hapus baris yang tidak memiliki kolom ID atau target yang penting; terakhir, isi nilai NaN yang tersisa dan tersebar. Pendekatan berlapis ini mempertahankan data sebanyak mungkin.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3, np.nan],
'feature': [1.0, np.nan, 3.0, 4.0],
'useless': [np.nan, np.nan, np.nan, np.nan]
})
clean = (
df
.dropna(how='all') # remove all-NaN rows
.drop(columns=df.columns[df.isna().mean() > 0.9]) # remove >90% empty cols
.dropna(subset=['id']) # must have an ID
)
print(clean)
# id feature
# 0 1.0 1.0
# 1 2.0 NaN
# 2 3.0 3.0Pemeriksaan Singkat
Uji pemahaman Anda tentang penghapusan nilai yang hilang dengan dropna().
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa dropna() secara bawaan menghapus baris yang memiliki NaN, how='all' hanya menghapus baris yang sepenuhnya kosong, subset= membatasi pemeriksaan pada kolom tertentu, dan thresh= mempertahankan baris yang memiliki jumlah minimum nilai yang tidak null. Gunakan axis=1 untuk menghapus kolom, bukan baris. Selanjutnya, kita akan mengisi nilai yang hilang, bukan menghapusnya, menggunakan fillna().
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menghapus Nilai yang Hilang” gratis?
Ya — teks lengkap “Menghapus Nilai yang Hilang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menghapus Nilai yang Hilang”?
Hapus baris atau kolom yang berisi NaN dengan dropna(), sambil mengatur ambang batas dan subset kolom yang diperiksa. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menghapus Nilai yang Hilang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendeteksi Nilai yang Hilang
- Menghapus Nilai yang Hilang
- Mengisi Nilai yang Hilang
- Interpolasi dan Imputasi Lanjutan