Pandas: Filter Baris Berdasarkan Kondisi (2026)
Blog/Tips & Trik/Pandas: Filter Baris Berdasarkan Kondisi (2026)

Pandas: Filter Baris Berdasarkan Kondisi (2026)

BimaBima
·5 Agustus 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Buat filter baris DataFrame di pandas, pakai boolean indexing: df[df['kolom'] > nilai]. Kondisi menghasilkan deret True/False, dan pandas cuma nyimpen baris yang True. Gabungin banyak syarat pakai & (dan) atau | (atau), tiap kondisi wajib dibungkus kurung.

Buat filter baris DataFrame di pandas, pakai boolean indexing: df[df['kolom'] > nilai]. Kondisi di dalam kurung ngasih deret True dan False, lalu pandas cuma nyimpen baris yang True.

Ini operasi paling sering dipakai pas olah data. Ambil transaksi di atas sekian, saring pelanggan dari kota tertentu, buang baris yang nilainya nol. Semua lewat pola yang sama.

Di artikel ini kamu bakal belajar filter satu syarat, gabungin banyak kondisi, pakai isin dan str.contains, sampai kesalahan yang paling sering bikin error.

Gimana cara filter baris di pandas?

Caranya lewat boolean indexing. Kamu tulis kondisi di dalam kurung siku, dan pandas balikin cuma baris yang memenuhi. Kondisi kayak df['omzet'] > 100 ngasih deret True/False sepanjang DataFrame, lalu dipakai buat nyaring.

import pandas as pd

df = pd.DataFrame({
    'nama': ['Budi', 'Sari', 'Andi', 'Rina'],
    'kota': ['Bandung', 'Bekasi', 'Bandung', 'Bogor'],
    'omzet': [120, 90, 150, 80]
})

# Baris dengan omzet di atas 100
df[df['omzet'] > 100]

Hasilnya cuma baris Budi dan Andi. Sisanya kebuang karena omzet-nya di bawah 100. Pola yang sama juga bisa ditulis pakai .loc, yang aku bahas di loc vs iloc.

Cara gabungin banyak kondisi

Buat lebih dari satu syarat, pakai & buat "dan" dan | buat "atau". Aturan wajib: tiap kondisi dibungkus kurung sendiri.

# Omzet di atas 100 DAN dari Bandung
df[(df['omzet'] > 100) & (df['kota'] == 'Bandung')]

# Dari Bekasi ATAU Bogor
df[(df['kota'] == 'Bekasi') | (df['kota'] == 'Bogor')]

Kenapa harus pakai & dan |, bukan and dan or? Karena pandas ngolah per elemen, sedangkan and Python cuma buat satu nilai boolean. Pakai and di sini langsung error.

Cara filter pakai daftar nilai (isin)

Kalau mau nyaring baris yang nilainya ada di sebuah daftar, isin lebih rapi dari nulis banyak OR.

# Dari Bandung atau Bogor, tanpa nulis dua kondisi
df[df['kota'].isin(['Bandung', 'Bogor'])]

Mau kebalikannya, yaitu yang bukan dari daftar itu? Tambah tanda ~ di depan.

df[~df['kota'].isin(['Bandung', 'Bogor'])]

Tanda ~ itu operator NOT di pandas. Dia ngebalik semua True jadi False dan sebaliknya.

Cara filter teks yang mengandung kata (str.contains)

Buat nyari baris yang teksnya mengandung kata tertentu, pakai str.contains.

# Nama yang mengandung huruf 'a' (case-insensitive)
df[df['nama'].str.contains('a', case=False, na=False)]

Parameter na=False penting biar baris kosong ga bikin error. Tanpa itu, nilai NaN di kolom teks bisa munculin error waktu dicocokin.

Cara filter pakai query yang lebih kebaca

Buat kondisi panjang, metode query bikin kode lebih enak dibaca karena mirip kalimat.

df.query("omzet > 100 and kota == 'Bandung'")

Di dalam query, kamu boleh pakai and dan or biasa karena diproses beda dari boolean indexing. Buat filter yang ribet, ini sering lebih gampang dibaca berbulan-bulan kemudian.

Contoh kasus: toko_berkah

Di dataset toko_berkah ngulikdata ada DataFrame 14.880 transaksi. Tim mau cari transaksi Minuman di atas Rp50.000 dari cabang Bandung, buat evaluasi promo.

hasil = df[
    (df['kategori'] == 'Minuman') &
    (df['nilai'] > 50000) &
    (df['cabang'] == 'Bandung')
]
print(len(hasil))

Dari 14.880 baris, filter tiga syarat ini nyisain 487 transaksi. Waktu aku cek, ternyata 62% dari transaksi Minuman di atas Rp50.000 justru datang dari cabang Bandung doang, padahal ada 3 cabang. Angka kayak gini yang bikin keputusan alokasi stok promo jadi lebih terarah, bukan nebak. Buat ngeringkas hasilnya per hari atau per produk, tinggal lanjut pakai groupby.

Kesalahan umum filter baris

  • Pakai and / or, bukan & / |. Operator Python biasa error di boolean indexing. Wajib pakai & dan |.
  • Lupa kurung tiap kondisi. df[df['a'] > 1 & df['b'] < 2] error karena urutan operasi. Bungkus: df[(df['a'] > 1) & (df['b'] < 2)].
  • str.contains kena NaN. Tanpa na=False, baris kosong bikin error. Selalu tambahin parameter itu.
  • Chained assignment. Ngubah nilai lewat df[kondisi]['kolom'] = x bisa munculin SettingWithCopyWarning. Pakai df.loc[kondisi, 'kolom'] = x.

FAQ

Kenapa filter pandas aku error pas pakai and?

Karena pandas ngolah kondisi per elemen di seluruh kolom, bukan satu nilai boolean tunggal. Kata and dan or bawaan Python cuma bisa buat satu nilai, jadi mereka error di boolean indexing. Ganti pakai & buat dan, | buat atau, dan bungkus tiap kondisi dalam kurung. Aturan ini beda dari Python biasa dan sering bikin pemula bingung.

Apa beda pakai df[kondisi] dan df.query()?

Dua-duanya nyaring baris dengan hasil sama. df[kondisi] pakai boolean indexing, lebih fleksibel dan cepat buat kondisi sederhana. df.query() nulis kondisi sebagai string mirip kalimat, jadi lebih kebaca buat filter panjang dan boleh pakai and atau or biasa. Pilih query kalau kondisinya ribet dan pengen kode yang gampang dibaca ulang.

Gimana cara filter baris yang nilainya kosong atau NaN?

Pakai isna() buat nyari baris kosong dan notna() buat yang terisi. Contoh: df[df['kolom'].isna()] ngasih baris yang kolomnya kosong, sedangkan df[df['kolom'].notna()] ngasih yang ada isinya. Ini beda dari membandingkan pakai == karena NaN ga pernah sama dengan apa pun, termasuk dirinya sendiri.

Apakah filter bikin DataFrame baru atau ngubah yang asli?

Filter biasanya ngasih DataFrame baru berupa hasil saringan, dan DataFrame asli tetap utuh. Kalau kamu mau simpan hasilnya, assign ke variabel baru kayak hasil = df[kondisi]. Kalau mau ngubah nilai di baris terfilter, pakai df.loc[kondisi, 'kolom'] = nilai supaya perubahan beneran masuk ke DataFrame asli tanpa munculin warning.

Penutup

Filter baris di pandas intinya boolean indexing: df[kondisi]. Gabungin banyak syarat pakai & dan |, selalu bungkus kurung, dan pakai isin atau str.contains buat kasus khusus.

Buat kondisi panjang, query bikin kode lebih kebaca. Buat ubah nilai terfilter, pakai .loc biar aman.

Mau lanjut olah data pandas? Baca loc vs iloc dan groupby, lalu latihan konsep data di Ngulik Data. Referensi resmi ada di dokumentasi boolean indexing pandas.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore