Data dari API dan dari pipeline NLP sering tiba dengan kolom berisi list: satu pesanan memuat banyak produk, satu artikel memuat banyak tag. Format itu ringkas untuk disimpan, tetapi groupby() maupun value_counts() menganggap satu list sebagai satu nilai, sehingga analisis per elemen tidak bisa jalan. Method DataFrame.explode() memecah setiap list menjadi baris terpisah sambil menyalin nilai kolom lain ke setiap baris hasil. Chapter ini membahas explode() satu kolom, pelepasan dua kolom list serentak, serta alur str.split() diikuti explode() untuk teks terpisah koma.

Satu Kolom List #

df.explode("kolom") mengambil setiap elemen list pada kolom tersebut dan menjadikannya satu baris sendiri. Baris dengan list dua elemen menjadi dua baris, list satu elemen tetap satu baris, dan elemen non-list seperti string biasa juga lolos tanpa galat. Parameter ignore_index=True membuat index hasil diurutkan ulang dari nol; tanpa parameter itu, index asli berulang — pola index ganda yang terasa di chapter reset_index. Nilai kolom pesanan disalin ulang ke setiap baris hasil, sehingga hubungan pesanan-produk tetap utuh setelah pelepasan.

python
import pandas as pd

pesanan = pd.DataFrame(
    {
        "pesanan": ["P-101", "P-102", "P-103"],
        "produk": [["Kopi", "Gula"], ["Teh"], ["Kopi", "Teh", "Susu"]],
        "unit": [[2, 1], [3], [1, 2, 4]],
    }
)
print(pesanan)

# satu kolom list menjadi baris terpisah
pecah = pesanan.explode("produk", ignore_index=True)
print("\nexplode kolom produk:")
print(pecah)

# dua kolom list dilepas serentak, posisinya tetap sejajar
dua = pesanan.explode(["produk", "unit"], ignore_index=True)
print("\nexplode dua kolom serentak:")
print(dua)

# teks terpisah koma dipecah dulu menjadi list, lalu dilepas
tag = pd.DataFrame({"tag": ["data, sql", "python, pandas, etl"]})
tag["tag"] = tag["tag"].str.split(", ")
print("\nhasil akhir dari string terpisah koma:")
print(tag.explode("tag", ignore_index=True))

Output yang Dihasilkan:

text
  pesanan             produk       unit
0   P-101       [Kopi, Gula]     [2, 1]
1   P-102              [Teh]        [3]
2   P-103  [Kopi, Teh, Susu]  [1, 2, 4]

explode kolom produk:
  pesanan produk       unit
0   P-101   Kopi     [2, 1]
1   P-101   Gula     [2, 1]
2   P-102    Teh        [3]
3   P-103   Kopi  [1, 2, 4]
4   P-103    Teh  [1, 2, 4]
5   P-103   Susu  [1, 2, 4]

explode dua kolom serentak:
  pesanan produk unit
0   P-101   Kopi    2
1   P-101   Gula    1
2   P-102    Teh    3
3   P-103   Kopi    1
4   P-103    Teh    2
5   P-103   Susu    4

hasil akhir dari string terpisah koma:
      tag
0    data
1     sql
2  python
3  pandas
4     etl

Mari kita telaah baris-baris kuncinya:

  1. Baris 12-13: explode("produk") menghasilkan enam baris dari tiga pesanan; kolom unit yang berupa list tidak disentuh dan tampil utuh di setiap baris.
  2. Baris 16-17: explode(["produk", "unit"]) melepas dua kolom serentak; pasangan elemen pada posisi yang sama tetap sejajar, sehingga Kopi tetap berpasangan dengan 2.
  3. Baris 21-23: str.split(", ") mengubah string terpisah koma menjadi list, dan explode() lanjutan menghasilkan satu tag per baris — total lima baris dari dua string.

Dua Kolom List Serentak #

Saat dua kolom list dilepas bersamaan, pandas memakai elemen pada posisi yang sama sebagai satu pasangan. Contoh menghasilkan baris Kopi dengan 2 dan Gula dengan 1 karena keduanya menempati posisi nol dan satu di list asalnya. Syaratnya panjang kedua list pada satu baris harus sama; bila tidak, pandas mengisi sisa posisi dengan NaN alih-alih melempar galat. Pola ini menggantikan langkah rumit memecah list satu per satu lalu menyusun ulang baris dengan merge internal.

Alur Teks ke Baris #

Kombinasi str.split() lalu explode() adalah pintu masuk paling umum: kolom teks yang diisi tag terpisah koma berubah menjadi tabel long yang siap dihitung. Setelah dilepas, value_counts() pada kolom hasil langsung memberi frekuensi tag, dan operasi .str lanjutan bekerja per elemen, bukan per list. Alur ini menghubungkan section Data Teks dan Kategori dengan section penggabungan: teks dipecah lewat accessor .str, lalu bentuk datanya diubah lewat explode().

Hasil explode() adalah bentuk long yang siap dihitung dan diplot. Chapter berikutnya kembali ke keluarga merge dengan dua alat spesialis: merge_ordered() yang menggabungkan tabel terurut waktu, dan anti-join pandas 3.0 yang menemukan baris tanpa pasangan.

Dokumentasi resmi yang relevan: pandas.DataFrame.explode untuk parameter column dan ignore_index, serta User Guide: Reshaping and pivot tables yang menempatkan explode di antara alat pembentuk data.