Semua pekerjaan pandas bermuara pada dua struktur data: Series dan DataFrame. Series adalah satu kolom berlabel, sedangkan DataFrame adalah tabel lengkap yang menggabungkan beberapa Series di bawah satu index yang sama. Mengenal anatomi keduanya sejak awal membuat setiap method pandas pada section berikutnya terasa masuk akal, bukan sekadar hafalan. Chapter ini membahas definisi, komponen penyusun, dan contoh pembuatan keduanya.

Series: Satu Kolom Berlabel #

Series adalah array satu dimensi yang setiap elemennya punya label dari index. Bentuknya mirip satu kolom spreadsheet: data bertipe sama, dengan penanda baris di sisi kiri. Kita membuatnya dengan pd.Series(data, index=...); bila index tidak diberikan, pandas memberi label integer mulai dari nol. Contoh berikut menyimpan harga tiga produk dengan nama produk sebagai labelnya.

python
import pandas as pd

harga = pd.Series(
    [85000, 32000, 24000],
    index=["Kopi Gayo", "Teh Melati", "Gula Aren"],
)

print(harga)
print()
print("index :", harga.index.tolist())
print("dtype :", harga.dtype)
print("nilai :", harga.to_numpy().tolist())

Output yang Dihasilkan:

text
Kopi Gayo     85000
Teh Melati    32000
Gula Aren     24000
dtype: int64

index : ['Kopi Gayo', 'Teh Melati', 'Gula Aren']
dtype : int64
nilai : [85000, 32000, 24000]

Mari kita telaah baris demi baris:

  1. Baris 3-6 (pd.Series(...)): argumen pertama adalah list nilai, argumen kedua adalah list label; pasangan nilai dan label inilah yang membedakan Series dari list biasa.
  2. Baris 8-10: print(harga) menampilkan pasangan label-nilai lalu index.tolist() menampilkan daftar label sebagai list Python.
  3. Baris 11 (harga.dtype): seluruh nilai berbagi satu tipe, yaitu int64; Series bersifat homogen.
  4. Baris 12 (to_numpy().tolist()): label ditinggalkan dan kita menerima nilai murni, persis seperti mengambil data dari array biasa.

DataFrame: Tabel Lengkap #

DataFrame adalah tabel dua dimensi: barisnya berlabel index, kolomnya bernama columns. Cara pembuatan yang paling umum adalah dictionary of lists, di mana setiap key menjadi nama kolom dan setiap value menjadi isinya. Contoh berikut membangun tabel stok dengan label baris kustom P1, P2, dan P3.

python
import pandas as pd

stok = pd.DataFrame(
    {
        "produk": ["Kopi Gayo", "Teh Melati", "Gula Aren"],
        "harga": [85000, 32000, 24000],
        "stok": [12, 30, 25],
    },
    index=["P1", "P2", "P3"],
)

print(stok)
print()
print("index  :", stok.index.tolist())
print("columns:", stok.columns.tolist())
print("shape  :", stok.shape)

Output yang Dihasilkan:

text
        produk  harga  stok
P1   Kopi Gayo  85000    12
P2  Teh Melati  32000    30
P3   Gula Aren  24000    25

index  : ['P1', 'P2', 'P3']
columns: ['produk', 'harga', 'stok']
shape  : (3, 3)

Mari kita telaah baris demi baris:

  1. Baris 3-10 (pd.DataFrame({...})): setiap key dictionary menjadi nama kolom, dan panjang listnya menentukan jumlah baris.
  2. Baris 9 (index=["P1", "P2", "P3"]): label baris diganti dari angka otomatis menjadi kode produk, sehingga stok.loc["P1"] nantinya langsung menunjuk baris pertama.
  3. Baris 14-15 (index dan columns): DataFrame menyimpan dua halaman label, satu untuk baris dan satu untuk kolom.
  4. Baris 16 (shape): (3, 3) berarti tiga baris dan tiga kolom; atribut ini sering dipakai untuk memeriksa ukuran data setelah dimuat.

Anatomi index, columns, dan dtypes #

Kedua struktur memakai komponen yang sama, dengan sedikit perbedaan kepemilikan. Tabel berikut memetakannya:

KomponenAtributDimiliki oleh
Label baris.indexSeries dan DataFrame
Nama kolom.columnsDataFrame saja
Tipe data.dtype (Series) / .dtypes (DataFrame)keduanya
Ukuran.shapekeduanya
Nilai murni.to_numpy()keduanya

Objek index pada pandas bersifat immutable: labelnya tidak dapat diubah satu per satu, tetapi seluruh index dapat diganti dengan assignment baru. Index juga tidak harus angka; label tanggal, kode produk, dan nama kota sama-sama sah. Ketika dua tabel digabungkan, pandas mencocokkan baris lewat index atau kolom kunci, bukan lewat posisi. Prinsip pencocokan berbasis label inilah yang nantinya dipakai merge, concat, dan reindex.

Homogen vs Heterogen #

Series menuntut satu tipe data untuk seluruh nilainya, sedangkan DataFrame menyatukan kolom-kolom bertipe berbeda dalam satu tabel. Kolom teks, kolom angka, dan kolom tanggal bisa berdampingan tanpa saling mengganggu, karena setiap kolom sebenarnya adalah Series tersendiri. Sejak pandas 3.0, kolom teks bertipe str secara default dengan missing value berbentuk NaN, bukan lagi object yang menyimpan objek Python satu per satu. Rincian perubahan ini dijelaskan pada panduan migrasi string 3.0 .

Dengan dua struktur ini di tangan, pertanyaan berikutnya bukan lagi bagaimana bentuknya, melainkan kapan kita memilih pandas dibanding alat lain. Chapter berikutnya membahas kriteria pemilihan tersebut. Kedua struktur juga sudah didokumentasikan resmi pada referensi pandas.Series dan referensi pandas.DataFrame , sementara Intro to data structures menjadi bacaan pengayaan yang nyaman.