Pandas loc vs iloc: Seleksi Data yang Benar (2026)
TL;DR
Di pandas, loc nyeleksi data berdasarkan label (nama index dan nama kolom), sedangkan iloc berdasarkan posisi angka (0, 1, 2). Beda penting: slicing loc ikut nilai akhir, slicing iloc nggak. Pakai loc kalau kamu tau nama barisnya, iloc kalau tau urutan posisinya.
Di pandas, loc nyeleksi data pakai label, sedangkan iloc pakai posisi angka. Itu beda inti yang bikin dua-duanya sering ketuker.
loc nanya "baris dengan label apa?". iloc nanya "baris di posisi ke berapa?". Kelihatan mirip, tapi hasilnya bisa beda jauh, apalagi pas slicing.
Di artikel ini kamu bakal tau kapan pakai yang mana, kenapa slicing keduanya beda, dan kesalahan yang paling sering bikin KeyError atau data salah ambil.
Apa beda loc dan iloc di pandas?
loc milih data berdasarkan label, yaitu nama index dan nama kolom. iloc milih berdasarkan posisi integer, mulai dari 0. Kalau index DataFrame kamu masih angka default 0, 1, 2, hasil keduanya sering keliatan sama. Bedanya baru kerasa pas index-nya berupa teks atau slicing.
| Aspek | loc | iloc |
|---|---|---|
| Basis seleksi | Label (nama) | Posisi (angka) |
| Contoh baris | df.loc['budi'] | df.iloc[0] |
| Slicing akhir | Termasuk nilai akhir | Ga termasuk nilai akhir |
| Cocok buat | Index label yang bermakna | Ambil baris per urutan |
Gimana cara pakai loc?
loc minta label. Formatnya df.loc[baris, kolom].
import pandas as pd
df = pd.DataFrame({
'nama': ['Budi', 'Sari', 'Andi'],
'kota': ['Bandung', 'Bekasi', 'Bogor'],
'omzet': [120, 90, 150]
}, index=['a', 'b', 'c'])
# Satu baris berdasarkan label index
df.loc['a']
# Baris 'a', kolom 'omzet'
df.loc['a', 'omzet'] # 120
# Beberapa baris dan kolom
df.loc[['a', 'c'], ['nama', 'omzet']]
loc juga bisa dipadu sama kondisi boolean, ini yang paling sering kepakai buat filter:
# Semua baris dengan omzet di atas 100
df.loc[df['omzet'] > 100]
Buat filter baris yang lebih dalam, cek panduan groupby pandas yang sering dipakai bareng loc.
Gimana cara pakai iloc?
iloc minta posisi angka, mulai 0. Formatnya df.iloc[baris, kolom].
# Baris pertama (posisi 0)
df.iloc[0]
# Baris posisi 0, kolom posisi 2
df.iloc[0, 2] # 120
# Tiga baris pertama
df.iloc[0:3]
# Baris posisi 0 dan 2, kolom posisi 0 dan 2
df.iloc[[0, 2], [0, 2]]
iloc ga peduli label index. Walau index kamu berupa teks 'a', 'b', 'c', iloc[0] tetap ngambil baris paling atas. Ini yang bikin dia aman buat ngambil "baris ke-n" tanpa mikirin nama.
Kenapa slicing loc dan iloc beda?
Ini bagian paling sering bikin bug. Slicing loc ikut nilai akhir. Slicing iloc nggak, sama kayak slicing list Python biasa.
# Index angka 0..4
df2 = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
df2.loc[1:3] # baris 1, 2, 3 (3 baris, akhir ikut)
df2.iloc[1:3] # baris 1, 2 (2 baris, akhir ga ikut)
Perhatiin. loc[1:3] ngasih 3 baris, iloc[1:3] cuma 2. Bedanya di apakah nilai akhir dihitung. Salah paham soal ini bikin kamu kelebihan atau kekurangan satu baris tanpa sadar.
Contoh kasus: toko_berkah
Di dataset toko_berkah ngulikdata ada DataFrame 14.880 baris transaksi, index-nya kode transaksi berupa teks kayak TRX-00001. Ada dua kebutuhan beda.
Pertama, ambil transaksi dengan kode spesifik. Karena index-nya label, pakai loc:
df.loc['TRX-00042']
Kedua, ambil 10 transaksi teratas buat cek cepat isi data. Karena ini soal posisi, pakai iloc:
df.iloc[0:10]
Waktu aku ngetes di dataset ini, nyoba df.loc[0] langsung keluar KeyError, karena ga ada baris berlabel angka 0. Index-nya teks semua. Kasus kayak gini yang bikin orang bingung kenapa loc error padahal barisnya jelas ada. Jawabannya: label ga cocok. Buat gabungin data transaksi sebelum diseleksi, biasanya lewat pandas merge dulu.
Kesalahan umum loc vs iloc
- Pakai loc dengan angka padahal index-nya teks.
df.loc[0]error kalau ga ada label 0. Pakai iloc buat posisi. - Ngira slicing keduanya sama.
loc[1:3]ikut akhir,iloc[1:3]nggak. Ini beda satu baris. - Chained indexing. Nulis
df[df['x'] > 0]['y'] = 1bisa munculin SettingWithCopyWarning. Pakaidf.loc[df['x'] > 0, 'y'] = 1yang lebih aman. - Lupa iloc butuh integer.
df.iloc['a']error, karena iloc cuma terima angka posisi.
FAQ
Kapan aku harus pakai loc dan kapan iloc?
Pakai loc kalau kamu tau nama baris atau kolomnya, misalnya index berupa kode atau tanggal yang bermakna. Pakai iloc kalau kamu cuma peduli posisi, misalnya ambil 5 baris pertama buat ngintip data. Aturan gampangnya: label pakai loc, angka posisi pakai iloc.
Kenapa df.loc[0] keluar KeyError?
Karena loc nyari label, bukan posisi. Kalau index DataFrame kamu berupa teks atau angka yang bukan 0, maka label 0 ga ada dan pandas keluar KeyError. Kalau maksud kamu ambil baris pertama, pakai df.iloc[0] yang berbasis posisi, bukan loc.
Apakah loc lebih lambat dari iloc?
Bedanya kecil dan jarang kerasa di kerjaan harian. Buat data biasa, pilih berdasarkan kejelasan kode, bukan kecepatan. loc bikin kode lebih kebaca kalau labelnya bermakna. iloc pas buat akses per posisi. Optimasi kecepatan mendingan dari cara lain, bukan dari milih antara keduanya.
Bisa ga loc dan iloc dipakai buat ubah nilai?
Bisa, dan malah disaranin. Nulis df.loc[kondisi, 'kolom'] = nilai adalah cara yang bener buat update data terfilter, tanpa munculin SettingWithCopyWarning. Hindari chained indexing kayak df[kondisi]['kolom'] = nilai karena hasilnya ga selalu ke-assign ke DataFrame asli.
Penutup
loc pakai label, iloc pakai posisi. Ingat satu jebakan besar: slicing loc ikut nilai akhir, iloc nggak. Sekali paham ini, kamu ga bakal salah ambil baris lagi.
Buat filter dan update data, biasakan pakai df.loc[kondisi, 'kolom'] supaya aman dari warning.
Mau lanjut olah data pandas? Baca Pandas groupby dan latihan konsep data di Ngulik Data. Referensi resmi ada di dokumentasi indexing pandas.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
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.
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.
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.