Pandas loc vs iloc: Seleksi Data yang Benar (2026)
Blog/Tips & Trik/Pandas loc vs iloc: Seleksi Data yang Benar (2026)

Pandas loc vs iloc: Seleksi Data yang Benar (2026)

BimaBima
·3 Agustus 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

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.

Aspeklociloc
Basis seleksiLabel (nama)Posisi (angka)
Contoh barisdf.loc['budi']df.iloc[0]
Slicing akhirTermasuk nilai akhirGa termasuk nilai akhir
Cocok buatIndex label yang bermaknaAmbil 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'] = 1 bisa munculin SettingWithCopyWarning. Pakai df.loc[df['x'] > 0, 'y'] = 1 yang 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.

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