Chapter sebelumnya menyentuh dictionary sekilas sebagai salah satu sumber pd.DataFrame(). Kali ini kita bedah varian dictionary secara tuntas, karena dua varian berbeda berperilaku sangat berbeda: dict of lists dan dict of Series. Pada dict of lists, kita menyerahkan daftar nilai polos dan wajib mematuhi satu aturan keras soal panjang. Pada dict of Series, setiap kolom membawa index sendiri sehingga pandas harus menyelaraskannya terlebih dahulu. Memahami keduanya membuat kita tahu persis apa yang terjadi saat tabel tidak terbentuk sebagaimana mestinya.
Dict of Lists dan Aturan Panjang yang Sama #
Pada pola dict of lists, setiap key menjadi nama kolom dan setiap list menjadi isi kolom tersebut. Panjang semua list dalam satu dictionary harus sama, karena setiap list dianggap satu kolom yang sejajar pada index baris yang sama. Bila salah satu list lebih pendek, pandas tidak menebak bagian yang hilang; konstruktor langsung menolak pembuatan tabel.
import pandas as pd
penjualan = pd.DataFrame({
"kasir": ["Budi", "Siti", "Dewi"],
"kota": ["Bandung", "Jakarta", "Surabaya"],
"qty": [12, 8, 15],
})
print(penjualan)
print()
stok = pd.Series({"Apel Fuji": 45, "Jeruk Baby": 120}, name="stok")
harga = pd.Series(
{"Apel Fuji": 32000, "Jeruk Baby": 18000, "Duku Palembang": 25000},
name="harga",
)
gabungan = pd.DataFrame({"stok": stok, "harga": harga})
print(gabungan)
print()
try:
pd.DataFrame({"qty": [12, 8, 15], "kota": ["Bandung", "Jakarta"]})
except ValueError as e:
print("Gagal dibuat ->", type(e).__name__, ":", e)Output yang Dihasilkan:
kasir kota qty
0 Budi Bandung 12
1 Siti Jakarta 8
2 Dewi Surabaya 15
stok harga
Apel Fuji 45.0 32000
Duku Palembang NaN 25000
Jeruk Baby 120.0 18000
Gagal dibuat -> ValueError : All arrays must be of the same lengthMari kita telaah bagian per bagian:
- Baris 3-7 (
penjualan = pd.DataFrame({...})): ketiga list sama panjang (3), sehingga DataFrame terbentuk denganRangeIndex0 sampai 2. Baris 0 selalu terdiri atasBudi,Bandung, dan12, karena posisi pada setiap list menandai baris yang sama. - Baris 11-15 (dua Series dengan isi berbeda):
stokmemiliki 2 label, sedangkanhargamemiliki 3 label. Konstruktor menggabungkan kedua index menjadi satu himpunan label. - Baris 16-17 (gabungan): tabel hasil memuat tiga baris label, dan baris
Duku PalembangberisiNaNpada kolomstokkarena label itu tidak ada di Seriesstok. - Baris 20-23 (blok try/except): kita sengaja memberi list
qty3 nilai dan listkota2 nilai. Pandas menolaknya denganValueError: All arrays must be of the same length, dan program kita menangkapnya agar output tetap rapi.
Dict of Series dan Penyelarasan Index #
Perbedaan mendasar terletak pada index. Sebuah Series membawa index sendiri, dan bila kita menyusun DataFrame dari beberapa Series, pandas menyatukan semua label index tersebut. Proses ini disebut alignment atau penyelarasan: baris yang labelnya ada di semua Series akan terisi penuh, sedangkan baris yang labelnya hanya ada di sebagian Series diisi NaN pada kolom sisanya.
Perhatikan output bagian kedua di atas. Label gabungannya berurut secara alfabet: Apel Fuji, Duku Palembang, Jeruk Baby; urutan ini berasal dari proses penyatuan label, bukan dari urutan penulisan kita. Kolom stok juga berubah menjadi float64, karena kolom itu kini memuat NaN di samping angka bulat, sama seperti kasus NaN pada chapter sebelumnya.
Dengan dictionary, kita memberi label kolom lewat key dan label baris mengikuti index sumber. Kedua pola pembuatan ini diuraikan resmi pada halaman intro to data structures , yang juga memuat contoh-contoh lanjutan untuk dibaca santai. Namun banyak data praktis datang tanpa label sama sekali: sekadar deret baris dalam list, atau blok angka dalam array NumPy. Chapter berikutnya menangani sumber-sumber tanpa label itu dan menunjukkan cara memberi nama kolomnya secara manual.