Mengambil elemen satu per satu menjadi melelahkan ketika data yang dibutuhkan berjumlah puluhan atau ratusan baris. Untuk kebutuhan itu, pandas menyediakan slicing: pemotongan rentang dengan satu ekspresi, misalnya “ambil posisi 1 sampai 3” atau “ambil label Teh sampai Susu”. Slicing Series mengikuti dua set aturan yang berbeda untuk .iloc dan .loc, dan perbedaan aturan batas inilah yang paling sering membuat pemula bingung. Chapter ini menguraikan keduanya secara berdampingan agar perbedaannya terlihat jelas.
Slicing Berbasis Posisi dengan iloc #
Slicing .iloc[start:stop] mengikuti aturan slicing Python: posisi start ikut, posisi stop tidak ikut (exclusive). Aturan ini sama dengan slicing list, sehingga stok.iloc[1:4] mengambil posisi 1, 2, dan 3 saja. Dengan aturan yang sama, stok.iloc[:2] mengambil dua elemen pertama dan stok.iloc[-2:] mengambil dua elemen terakhir, karena posisi negatif dihitung dari belakang.
Slicing Berbasis Label dengan loc #
Slicing .loc[label_awal:label_akhir] memakai aturan yang berbeda: label awal dan label akhir keduanya ikut (inclusive). Ekspresi stok.loc["Teh":"Susu"] mengambil semua elemen dari label Teh sampai label Susu termasuk Susu sendiri. Perilaku ini memang berbeda dari kebiasaan Python, tetapi lebih intuitif untuk data berlabel karena kita menyebut label yang benar-benar ingin diambil.
Skrip berikut menjalankan beberapa pola slicing pada satu Series stok yang sama agar hasilnya mudah dibandingkan.
import pandas as pd
stok = pd.Series(
[12, 30, 25, 8, 40],
index=["Kopi", "Teh", "Gula", "Susu", "Roti"],
)
print(stok.iloc[1:4]) # posisi 1, 2, 3
print()
print(stok.loc["Teh":"Susu"]) # label Teh sampai Susu
print()
print(stok.iloc[:2]) # dua elemen pertama
print()
print(stok.iloc[-2:]) # dua elemen terakhir
print()
print(stok.iloc[::2]) # setiap elemen keduaOutput yang Dihasilkan:
Teh 30
Gula 25
Susu 8
dtype: int64
Teh 30
Gula 25
Susu 8
dtype: int64
Kopi 12
Teh 30
dtype: int64
Susu 8
Roti 40
dtype: int64
Kopi 12
Gula 25
Roti 40
dtype: int64Mari kita telaah kode di atas:
stok.iloc[1:4]: mengambil posisi 1, 2, dan 3; hasilnyaTeh,Gula,Susu, sedangkan posisi 4 (Roti) tidak ikut karena batas atas bersifat eksklusif.stok.loc["Teh":"Susu"]: mengambil labelTehsampaiSusudan keduanya ikut; hasilnya identik dengan pola pertama, tetapi hanya karena kebetulan label yang diminta menutupi posisi yang sama.stok.iloc[:2]: bagianstartyang kosong berarti mulai dari awal; hasilnyaKopidanTeh.stok.iloc[-2:]: bagianstopyang kosong berarti sampai habis; posisi-2mengarah keSusu, sehingga hasilnyaSusudanRoti.stok.iloc[::2]: bagian ketiga adalah langkah (step); langkah 2 mengambil setiap elemen kedua sehingga hasilnyaKopi,Gula,Roti.
Ringkasan Perbedaan Aturan #
Tabel berikut merangkum dua sistem slicing agar mudah diingat saat menulis kode:
| Aspek | .iloc[start:stop] | .loc[label_awal:label_akhir] |
|---|---|---|
| Basis | Posisi integer | Label index |
| Batas atas | Tidak ikut (exclusive) | Ikut (inclusive) |
| Dukungan posisi negatif | Ya, misal [-2:] | Tidak berlaku untuk label |
| Dukungan langkah | Ya, misal [::2] | Terbatas dan jarang dipakai |
Contoh hasil pada stok | iloc[1:4] → Teh, Gula, Susu | loc["Teh":"Susu"] → Teh, Gula, Susu |
Slicing menyelesaikan kebutuhan mengambil rentang data dengan cepat dan tanpa loop. Dengan ini kita sudah menguasai pembacaan isi Series dari tiga arah: label, posisi, dan rentang. Chapter berikutnya, “Atribut Series”, berpindah dari isi ke metadata: kita memeriksa nama, tipe data, ukuran, dan kondisi Series tanpa menyentuh nilainya satu per satu. Rujukan resmi untuk materi slicing ada pada pandas.Series.loc dan User Guide bagian indexing .