Kursus
Salah satu hal yang sering membingungkan saat kita belajar Pandas adalah perbedaan antara .loc dan .iloc.
Mari kita akhiri kebingungan ini dan memperjelas perbedaan kedua metode tersebut. Saya akan memberikan banyak contoh, dan semoga perbedaannya akan jauh lebih jelas di akhir blog ini.
Apa itu .loc dan .iloc di Pandas?
Baik .loc maupun .iloc adalah atribut penting dari DataFrame Pandas, dan keduanya digunakan untuk memilih subset data tertentu. Tujuannya adalah mengakses dan memungkinkan manipulasi bagian spesifik dari DataFrame alih-alih seluruh DataFrame.
|
Fitur |
.loc |
.iloc |
|
Sintaks |
df.loc[row_indexer, column_indexer] |
df.iloc[row_indexer, column_indexer] |
|
Metode Pengindeksan |
Pengindeksan berbasis label |
Pengindeksan berbasis posisi |
|
Digunakan untuk Referensi |
Label baris dan kolom (nama) |
Indeks numerik baris dan kolom (mulai dari 0) |
Seperti yang kita lihat dari tabel, sintaksnya terlihat sangat mirip. Perbedaannya terletak pada bagaimana kita menggunakan argumen row_indexer dan column_indexer. Ini karena kedua metode menawarkan pendekatan berbeda untuk mengindeks data: .loc mengindeks berdasarkan nama label, sedangkan .iloc menggunakan posisi numerik baris dan kolom sebagai argumen.
Mari kita bahas masing-masing metode secara detail, dimulai dengan .loc.
Menggunakan .loc: Seleksi berdasarkan Label
Untuk menggambarkan konsepnya, bayangkan sebuah basis data pelanggan hipotetis yang direpresentasikan oleh DataFrame bernama df, dengan Customer ID sebagai indeks baris:
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
|
C567 |
David Lee |
China |
Asia |
40 |
Ada empat cara utama untuk memilih baris dengan .loc. Di antaranya:
- Memilih satu baris
- Memilih beberapa baris
- Memilih irisan baris (slice)
- Seleksi baris bersyarat
Memilih satu baris menggunakan .loc
Untuk memilih satu baris, kita gunakan label baris yang ingin diambil sebagai row_indexer. Maka, sintaksnya seperti ini: df.loc['row_label']. Mari gunakan ini untuk menampilkan semua informasi pelanggan kita, Ali Khan:
df.loc['C345']
|
C345 |
|
|
Name |
Ali Khan |
|
Country |
Pakistan |
|
Region |
Asia |
|
Age |
19 |
Memilih beberapa baris menggunakan .loc
Jika kita ingin memilih beberapa baris yang tidak harus berurutan, kita harus memasukkan daftar label barisnya sebagai argumen row_indexer. Artinya, kita perlu menggunakan bukan satu melainkan dua pasang tanda kurung siku: satu untuk sintaks .loc biasa dan satu untuk daftar label.
Baris df.loc[['row_label_1', 'row_label_2']] akan mengembalikan dua baris DataFrame df yang ditentukan dalam daftar. Misalnya kita ingin mengetahui tidak hanya informasi tentang Ali Khan tetapi juga David Lee:
df.loc[['C345', 'C567']]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C567 |
David Lee |
China |
Asia |
40 |
Memilih irisan baris menggunakan .loc
Kita dapat memilih rentang baris dengan memasukkan label baris pertama dan terakhir dengan titik dua di antaranya: df.loc['row_label_start':'row_label_end']. Kita bisa menampilkan empat baris pertama DataFrame kita seperti ini:
df.loc['C123' : 'C456']
|
Customer ID |
Name |
Country |
Region |
Signup Date |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
Ada dua hal yang perlu diingat di sini:
- Output mencakup baris yang ditentukan di
row_label_end. Ini berbeda pada.iloc, yang akan kita bahas nanti. - Kita hanya menggunakan satu pasang tanda kurung siku, meskipun ingin mengambil beberapa baris. Kita tidak menggunakan daftar untuk menentukan berbagai baris, sehingga menggunakan dua tanda kurung siku akan menghasilkan
SyntaxError.
Seleksi bersyarat baris menggunakan .loc
Kita juga dapat mengembalikan baris berdasarkan ekspresi bersyarat. Kita dapat memfilter semua baris berdasarkan apakah mereka memenuhi kondisi tertentu atau tidak dan hanya menampilkan yang memenuhi.
Sintaks yang sesuai adalah df.loc[conditional_expression], dengan conditional_expression berupa pernyataan tentang nilai yang diperbolehkan dalam kolom tertentu.
Untuk kolom dengan data non-numerik (seperti Name atau Country), pernyataan hanya dapat menggunakan operator sama atau tidak sama, karena tidak ada urutan antar nilai. Misalnya, kita dapat mengembalikan semua baris pelanggan yang bukan dari Asia:
df.loc[df['Region'] != 'Asia']
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
Memilih satu kolom menggunakan .loc
Untuk memilih kolom, kita perlu menentukan argumen column_indexer, yang diletakkan setelah argumen row_indexer. Jika kita hanya ingin menentukan column_indexer, kita perlu menandai bahwa kita ingin mengembalikan semua baris dan hanya memfilter pada kolom. Mari lihat caranya!
Memilih satu kolom dapat dilakukan dengan menentukan column_indexer menggunakan label kolom yang bersangkutan. Untuk mengambil semua baris, kita perlu menentukan row_indexer dengan titik dua sederhana. Kita mendapatkan sintaks seperti ini: df.loc[:, 'column_name'].
Mari tampilkan Name dari setiap pelanggan:
df.loc[:, 'Name']
|
Customer ID |
Name |
|
C123 |
John Doe |
|
C234 |
Petra Müller |
|
C345 |
Ali Khan |
|
C456 |
Maria Gonzalez |
|
C567 |
David Lee |
Memilih beberapa kolom menggunakan .loc
Serupa dengan memilih beberapa baris, kita perlu memasukkan daftar label kolom jika ingin mengembalikan beberapa kolom dari sebuah DataFrame yang tidak harus berurutan: df.loc[:, [col_label_1, 'col_label_2']].
Misalkan kita ingin menambahkan Age semua pelanggan ke output terakhir kita, maka akan bekerja seperti ini:
df.loc[:, ['Name', 'Age']]
|
Customer ID |
Name |
Age |
|
C123 |
John Doe |
67 |
|
C234 |
Petra Müller |
51 |
|
C345 |
Ali Khan |
19 |
|
C456 |
Maria Gonzalez |
26 |
|
C567 |
David Lee |
40 |
Memilih irisan kolom menggunakan .loc
Menggunakan titik dua di antara label dua kolom akan memilih semua kolom dalam rentang urutan antara kedua kolom tersebut. Ini inklusif terhadap kolom akhir, artinya kolom bernama col_end juga akan dipilih dalam sintaks standar berikut: df.loc[:, 'col_start':'col_end'].
Jika kita tertarik pada Name, Country, dan Region dari pelanggan kita, baris kode kita bisa seperti ini:
df.loc[:, 'Name':'Region']
|
Customer ID |
Name |
Country |
Region |
|
C123 |
John Doe |
United States |
North America |
|
C234 |
Petra Müller |
Germany |
Europe |
|
C345 |
Ali Khan |
Pakistan |
Asia |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
|
C567 |
David Lee |
China |
Asia |
Seleksi gabungan baris dan kolom menggunakan .loc
Kita juga bisa menentukan row_indexer dan column_indexer sekaligus. Ini bisa digunakan untuk mengambil satu potong informasi, yakni satu sel dari DataFrame. Untuk melakukannya, kita tentukan satu baris dan satu kolom menggunakan sintaks df.loc['row_label', 'column_name'] .
Kasus yang lebih berguna adalah mengembalikan sub-DataFrame yang berfokus tepat pada kumpulan baris dan kolom yang kita minati. Dimungkinkan untuk menentukan kedua indexer sebagai daftar menggunakan tanda kurung siku, atau sebagai irisan menggunakan titik dua, dan bahkan menggabungkannya dengan ekspresi bersyarat untuk seleksi baris.
Berikut contoh untuk mengembalikan Name, Country, dan Region dari setiap pelanggan dengan Age di atas 30:
df.loc[df['Age'] > 30, 'Name':'Region']
|
Customer ID |
Name |
Country |
Region |
|
C123 |
John Doe |
United States |
North America |
|
C234 |
Petra Müller |
Germany |
Europe |
|
C567 |
David Lee |
China |
Asia |
Menggunakan .iloc: Seleksi berdasarkan Posisi Integer
.iloc memilih berdasarkan posisi, bukan label. Ini adalah sintaks standar penggunaan .iloc: df.iloc[row_indexer, column_indexer]. Ada dua hal khusus yang perlu diperhatikan:
- Penghitungan dimulai dari 0: Baris dan kolom pertama memiliki indeks 0, yang kedua indeks 1, dan seterusnya.
- Eksklusivitas nilai akhir rentang: Saat menggunakan irisan, baris atau kolom yang ditentukan setelah titik dua tidak disertakan dalam seleksi.
Memilih satu baris menggunakan .iloc
Satu baris dapat dipilih dengan menggunakan bilangan bulat yang merepresentasikan nomor indeks baris sebagai row_indexer. Kita tidak memerlukan tanda kutip karena kita memasukkan bilangan bulat, bukan string label seperti pada .loc. Untuk mengembalikan baris pertama dari DataFrame bernama df, masukkan df.iloc[0].
Pada DataFrame contoh kita, baris kode ini mengembalikan informasi John Doe:
df.iloc[0]
|
C123 |
|
|
Name |
John Doe |
|
Country |
United States |
|
Region |
North America |
|
Age |
67 |
Memilih beberapa baris menggunakan .iloc
Memilih beberapa baris pada .iloc bekerja seperti pada .loc—kita memasukkan integer indeks baris dalam sebuah daftar dengan tanda kurung siku. Sintaksnya seperti ini: df.iloc[[0, 3, 4]].
Output terkait pada tabel pelanggan kita dapat dilihat di bawah:
df.iloc[[0, 3, 4]]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
|
C567 |
David Lee |
China |
Asia |
40 |
Memilih irisan baris menggunakan .iloc
Untuk memilih irisan baris, kita gunakan titik dua di antara dua integer indeks baris yang ditentukan. Sekarang, kita harus memperhatikan sifat eksklusif yang disebutkan sebelumnya.
Kita bisa mengambil baris df.iloc[1:4] sebagai contoh untuk menggambarkan konsep ini. Angka indeks 1 berarti baris kedua, jadi irisan kita dimulai dari sana. Bilangan indeks 4 merepresentasikan baris kelima – tetapi karena .iloc tidak inklusif untuk pemilihan irisan, output kita akan menyertakan semua baris hingga yang terakhir sebelum ini. Oleh karena itu, akan mengembalikan baris kedua, ketiga, dan keempat.
Mari buktikan bahwa baris tersebut bekerja sebagaimana mestinya:
df.iloc[1:4]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
Memilih satu kolom menggunakan .iloc
Logika memilih kolom menggunakan .iloc mengikuti apa yang telah kita pelajari sejauh ini. Mari lihat bagaimana cara kerjanya untuk kolom tunggal, banyak kolom, dan irisan kolom.
Sama seperti pada .loc, penting untuk menentukan row_indexer sebelum kita dapat lanjut ke column_indexer. Untuk mengambil nilai kolom ketiga dari df untuk setiap baris, masukkan df.iloc[:, 2] .
Karena Region adalah kolom ketiga di DataFrame kita, kolom tersebut akan diambil sebagai konsekuensi dari baris kode itu:
df.iloc[:, 2]
|
Customer ID |
Region |
|
C123 |
North America |
|
C234 |
Europe |
|
C345 |
Asia |
|
C456 |
North America |
|
C567 |
Asia |
Memilih beberapa kolom menggunakan .iloc
Untuk memilih beberapa kolom yang tidak harus berurutan, kita kembali dapat memasukkan daftar yang berisi bilangan bulat sebagai column_indexer. Baris df.iloc[:, [0, 3]] mengembalikan kolom pertama dan keempat.
Dalam kasus kita, informasi yang ditampilkan adalah Name serta Age dari setiap pelanggan:
df.iloc[:, [0, 3]]
|
Customer ID |
Name |
Age |
|
C123 |
John Doe |
67 |
|
C234 |
Petra Müller |
51 |
|
C345 |
Ali Khan |
19 |
|
C456 |
Maria Gonzalez |
26 |
|
C567 |
David Lee |
40 |
Memilih irisan kolom menggunakan .iloc
Untuk seleksi irisan menggunakan .iloc, logika column_indexer mengikuti row_indexer. Kolom yang direpresentasikan oleh bilangan bulat setelah titik dua tidak disertakan dalam output. Untuk mengambil kolom kedua dan ketiga, baris kode harus seperti ini: df.iloc[:, 1:3].
Baris di bawah ini mengembalikan semua informasi geografis yang kita miliki tentang pelanggan:
df.iloc[:, 1:3]
|
Customer ID |
Country |
Region |
|
C123 |
United States |
North America |
|
C234 |
Germany |
Europe |
|
C345 |
Pakistan |
Asia |
|
C456 |
Mexico |
North America |
|
C567 |
China |
Asia |
Seleksi gabungan baris dan kolom menggunakan .iloc
Kita dapat menggabungkan apa yang kita pelajari tentang .iloc untuk memadukan seleksi baris dan kolom. Lagi-lagi, dimungkinkan untuk mengembalikan satu sel atau sub-DataFrame. Untuk mengembalikan satu sel pada perpotongan baris ke-3 dan kolom ke-4, masukkan df.iloc[2, 3].
Sama seperti pada .loc, kita dapat menentukan kedua indexer sebagai daftar menggunakan tanda kurung siku, atau sebagai irisan menggunakan titik dua. Jika kita ingin memilih baris menggunakan ekspresi bersyarat, itu secara teknis juga memungkinkan dengan .iloc, tetapi tidak direkomendasikan. Menggunakan nama label dan .loc biasanya jauh lebih intuitif dan lebih kecil kemungkinannya menimbulkan kesalahan.
Contoh terakhir ini menampilkan Country, Region dan Age untuk baris pertama, kedua, dan kelima di DataFrame kita:
df.iloc[[0,1,4], 1:4]
|
Customer ID |
Country |
Region |
Age |
|
C123 |
United States |
North America |
67 |
|
C234 |
Germany |
Europe |
51 |
|
C567 |
China |
Asia |
40 |
.iloc vs .loc: Kapan Menggunakan yang Mana
Secara umum, ada satu aturan praktis sederhana di mana pilihan metode bergantung pada pengetahuan Anda tentang DataFrame:
- Gunakan
.locketika Anda mengetahui label (nama) baris/kolom. - Gunakan
.ilocketika Anda mengetahui posisi bilangan bulat baris/kolom.
Beberapa skenario secara alami lebih cocok untuk .loc atau .iloc. Misalnya, mengiterasi baris atau kolom lebih mudah dan lebih intuitif menggunakan bilangan bulat daripada label. Seperti yang sudah disebutkan, memfilter baris berdasarkan kondisi pada nilai kolom lebih kecil kemungkinannya menimbulkan kesalahan jika menggunakan nama label kolom.
|
Skenario yang Lebih Cocok untuk .loc |
Skenario yang Lebih Cocok untuk .iloc |
|
DataFrame Anda memiliki nama indeks/kolom yang bermakna. |
Anda mengiterasi baris/kolom berdasarkan posisinya. |
|
Anda perlu memfilter berdasarkan kondisi pada nilai kolom. |
Nama indeks/kolom tidak relevan dengan tugas Anda. |
KeyError, NameError, dan IndexError dengan .loc dan .iloc
Mari kita lihat kemungkinan masalah. Kesalahan umum saat menggunakan .loc adalah mengalami KeyError. Kesalahan ini terjadi ketika kita mencoba mengakses label baris atau kolom yang tidak ada dalam DataFrame. Untuk menghindarinya, kita harus selalu memastikan label yang kita gunakan akurat dan sesuai dengan label yang ada di DataFrame Anda serta memeriksa kembali kemungkinan salah ketik.
Selain itu, penting untuk selalu menggunakan tanda kutip untuk label yang ditentukan menggunakan .loc. Melupakannya akan menghasilkan NameError.
Sebuah IndexError dapat terjadi saat menggunakan .iloc jika kita menentukan posisi bilangan bulat yang berada di luar rentang valid indeks DataFrame. Ini terjadi ketika indeks yang Anda coba akses tidak ada, baik karena melampaui jumlah baris atau kolom di DataFrame Anda atau karena bernilai negatif. Untuk mencegah kesalahan ini, periksa dimensi DataFrame Anda dan gunakan nilai indeks yang sesuai dalam rentang yang valid.
Kesimpulan
Semoga blog ini bermanfaat dan perbedaan antara .loc dan .iloc kini sudah jelas. Untuk belajar lebih lanjut, berikut beberapa langkah berikut yang bagus:
Tom adalah seorang ilmuwan data dan pendidik teknis. Ia menulis dan mengelola tutorial serta artikel blog ilmu data DataCamp. Sebelumnya, Tom bekerja di bidang ilmu data di Deutsche Telekom.

