Tidak semua tabel memiliki label yang bermakna: data hasil read_csv tanpa kolom nomor sering memakai penomoran otomatis 0, 1, 2, dan seterusnya. Ketika kebutuhan kita berbunyi “ambil baris ketiga” atau “ambil baris terakhir”, yang dimaksud adalah posisi, bukan label. Pandas menyediakan property .iloc (integer location) yang membaca baris dan kolom berdasarkan posisi integer mulai dari nol. Chapter ini mempraktikkan .iloc untuk satu posisi, posisi negatif, pemilihan sel, dan slicing posisi.
Akses Baris Lewat Posisi Integer #
Cara menulisnya mirip .loc, tetapi isi kurung siku adalah bilangan bulat posisi. Kita ambil baris ketiga dari data karyawan dengan karyawan.iloc[2], lalu beberapa variasi lain, mengikuti pola yang dijelaskan pada panduan Indexing and selecting data
. Ingat bahwa posisi dihitung mulai dari 0.
import pandas as pd
karyawan = pd.DataFrame(
{
"nama": ["Budi", "Siti", "Dewi", "Andi", "Rina"],
"kota": ["Bandung", "Jakarta", "Surabaya", "Bandung", "Medan"],
"umur": [29, 34, 25, 31, 27],
"gaji": [8500000, 10500000, 7200000, 9800000, 8000000],
},
index=["E001", "E002", "E003", "E004", "E005"],
)
baris_ketiga = karyawan.iloc[2]
print(baris_ketiga)
print()
print(karyawan.iloc[-1, 0])
print()
dua_baris = karyawan.iloc[0:2]
print(dua_baris)Output yang Dihasilkan:
nama Dewi
kota Surabaya
umur 25
gaji 7200000
Name: E003, dtype: object
Rina
nama kota umur gaji
E001 Budi Bandung 29 8500000
E002 Siti Jakarta 34 10500000Mari kita telaah peran setiap bagian kode di atas:
- Baris 3-11 (
karyawan = pd.DataFrame(...)): dataset lima karyawan yang sama, dengan label indexE001sampaiE005. - Baris 13 (
baris_ketiga = karyawan.iloc[2]):.ilocmembaca baris pada posisi ke-2, yaitu baris ketiga, dan mengembalikannya sebagai Series. - Baris 17 (
print(karyawan.iloc[-1, 0])): dua bilangan dipisah koma berarti posisi baris terakhir dan posisi kolom pertama. - Baris 20-21: rentang
0:2memilih baris pada posisi 0 dan 1 untuk memperlihatkan perilaku slicing.
Label dan Posisi Tidak Selalu Sama #
Perhatikan output pertama: yang kita minta adalah posisi 2, tetapi Name: E003 menunjukkan label baris tersebut E003. Inilah perbedaan mendasar antara .loc dan .iloc: .loc["E002"] mencari label E002, sedangkan .iloc[2] mencari baris ketiga apa pun labelnya. Pada dataset kita keduanya kebetulan bergeser satu karena index dimulai dari E001. Perbedaan label dan posisi makin terasa setelah baris difilter atau diurutkan ulang, karena posisi tetap berurutan sementara labelnya acak.
Posisi Negatif dan Pemilihan Sel #
.iloc menerima bilangan negatif dengan makna yang sama seperti list Python: -1 berarti posisi terakhir. Penulisan dua bilangan yang dipisah koma, misalnya karyawan.iloc[-1, 0], berarti baris pada posisi terakhir dan kolom pada posisi 0; output kita mencetak Rina, nilai kolom nama untuk baris E005. Bentuk [baris, kolom] ini adalah cara .iloc mengambil satu sel dalam satu pernyataan. Label baris E005 dan nama kolom nama tidak perlu kita ketahui sebelumnya, cukup posisinya.
Slicing Posisi Bersifat Eksklusif #
Baris terakhir output memakai rentang 0:2 yang hanya mengembalikan dua baris, yaitu E001 dan E002. Aturannya sama dengan slice list Python: batas akhir tidak ikut disertakan. Aturan eksklusif ini berlaku untuk kedua dimensi, sehingga karyawan.iloc[1:3, 0:2] mengambil posisi baris 1 dan 2 serta posisi kolom 0 dan 1. Kontras dengan .loc yang inklusif perlu diingat setiap kali kita berganti basis seleksi, sebagaimana dijelaskan pada halaman pandas.DataFrame.iloc
.
Kini ketiga basis seleksi sudah lengkap: nama kolom lewat kurung siku, label lewat .loc, dan posisi lewat .iloc. Praktik yang sering dibutuhkan adalah memotong dua dimensi sekaligus dalam satu pernyataan, misalnya tiga baris tertentu yang hanya menampilkan dua kolom. Chapter berikutnya menggabungkan seluruh pola tersebut menjadi potongan baris dan kolom yang utuh.