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.

python
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 kedua

Output yang Dihasilkan:

text
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: int64

Mari kita telaah kode di atas:

  1. stok.iloc[1:4]: mengambil posisi 1, 2, dan 3; hasilnya Teh, Gula, Susu, sedangkan posisi 4 (Roti) tidak ikut karena batas atas bersifat eksklusif.
  2. stok.loc["Teh":"Susu"]: mengambil label Teh sampai Susu dan keduanya ikut; hasilnya identik dengan pola pertama, tetapi hanya karena kebetulan label yang diminta menutupi posisi yang sama.
  3. stok.iloc[:2]: bagian start yang kosong berarti mulai dari awal; hasilnya Kopi dan Teh.
  4. stok.iloc[-2:]: bagian stop yang kosong berarti sampai habis; posisi -2 mengarah ke Susu, sehingga hasilnya Susu dan Roti.
  5. stok.iloc[::2]: bagian ketiga adalah langkah (step); langkah 2 mengambil setiap elemen kedua sehingga hasilnya Kopi, 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]
BasisPosisi integerLabel index
Batas atasTidak ikut (exclusive)Ikut (inclusive)
Dukungan posisi negatifYa, misal [-2:]Tidak berlaku untuk label
Dukungan langkahYa, misal [::2]Terbatas dan jarang dipakai
Contoh hasil pada stokiloc[1:4] → Teh, Gula, Susuloc["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 .