Setelah mengenal DataFrame sebagai tabel berlabel, sekarang saatnya membuatnya sendiri. Gerbang masuknya adalah konstruktor pd.DataFrame(), yaitu fungsi milik pandas yang menerima data dari berbagai bentuk sumber Python dan menyusunnya menjadi tabel. Pada praktiknya, empat pola pembuatan paling sering dipakai saat data masih kecil dan masih berada di kode: dictionary kolom, list of dictionary, parameter columns, dan wadah kosong. Chapter ini menuntun keempat pola tersebut satu per satu, lengkap dengan perilaku yang perlu kita waspadai.

Data Kolom Lalu Data Baris #

Pola pertama sudah sering kita lihat: dictionary yang key-nya menjadi nama kolom dan value-nya berupa list nilai. Pola ini cocok ketika data tersusun per kolom di kepala kita. Pola kedua membalik arah pandangnya: sebuah list berisi dictionary, di mana satu dictionary mewakili satu baris lengkap dengan atribut-atributnya.

python
import pandas as pd

stok_buah = pd.DataFrame({
    "produk": ["Apel Fuji", "Jeruk Baby", "Mangga Harum Manis"],
    "harga": [32000, 18000, 28000],
})
print(stok_buah)
print()

pelanggan = pd.DataFrame([
    {"nama": "Budi", "kota": "Bandung", "poin": 120},
    {"nama": "Siti", "kota": "Jakarta", "poin": 250},
    {"nama": "Dewi", "kota": "Surabaya"},
])
print(pelanggan)
print()

katalog = pd.DataFrame(
    {"produk": ["Apel Fuji", "Jeruk Baby"], "harga": [32000, 18000]},
    columns=["harga", "produk"],
)
print(katalog)
print()

keranjang = pd.DataFrame(columns=["produk", "qty", "harga"])
print(keranjang)
print("kosong?", keranjang.empty, "| ukuran:", keranjang.shape)

Output yang Dihasilkan:

text
               produk  harga
0           Apel Fuji  32000
1          Jeruk Baby  18000
2  Mangga Harum Manis  28000

   nama      kota   poin
0  Budi   Bandung  120.0
1  Siti   Jakarta  250.0
2  Dewi  Surabaya    NaN

   harga      produk
0  32000   Apel Fuji
1  18000  Jeruk Baby

Empty DataFrame
Columns: [produk, qty, harga]
Index: []
kosong? True | ukuran: (0, 3)

Mari kita telaah hasil pola 2 pada output di atas:

  1. Baris 10-14 (list of dictionary): setiap dictionary adalah satu baris; pd.DataFrame() membaca semua key yang muncul dan menjadikannya kolom nama, kota, dan poin.
  2. Baris 13 (dict Dewi tanpa key poin): pandas tidak menganggap ini galat. Konstruktor mengisi sel yang hilang dengan NaN, penanda nilai kosong (not a number) pada pandas.
  3. Kolom poin menjadi float64: karena kolom tersebut kini memuat NaN, pandas menaikkan tipe kolomnya dari bilangan bulat menjadi floating point. Perilaku ini penting diingat saat hasil ternyata mengejutkan.

Mengatur Urutan Kolom dengan columns #

Secara bawaan, urutan kolom mengikuti urutan kemunculan data pada sumbernya. Ketika tampilan tabel perlu diatur, parameter columns memberi kendali penuh: kita menuliskan daftar nama kolom sesuai urutan yang diinginkan. Pada pola 3 di atas, dictionary menyebut produk lebih dulu, tetapi parameter columns=["harga", "produk"] membalik urutannya menjadi harga lebih dulu. Parameter yang sama juga berguna untuk menyaring kolom mana saja yang ikut dibuat saat sumbernya memiliki banyak key.

Wadah Kosong dengan Struktur Kolom #

Pola keempat tidak memuat data sama sekali. pd.DataFrame(columns=["produk", "qty", "harga"]) menghasilkan tabel kosong yang sudah memiliki struktur kolom siap pakai. Output pola 4 menunjukkan tulisan Empty DataFrame lengkap dengan daftar kolomnya, dan pemeriksaan keranjang.empty mengembalikan True sementara keranjang.shape mengembalikan (0, 3), artinya nol baris dan tiga kolom. Pola ini berguna sebagai wadah penampung hasil perhitungan yang akan diisi baris demi baris nanti, misalnya saat mengumpulkan hasil dari sebuah loop.

Keempat pola di atas memakai tipe kontainer Python yang biasa: dict dan list. Pandas juga menerima sumber yang lebih kaya seperti objek Series, list of lists, dan array NumPy; ketiganya punya aturan tersendiri yang layak dibedah satu per satu. Daftar lengkap parameter konstruktor tersimpan di halaman pandas.DataFrame dan layak disimpan sebagai rujukan cepat. Chapter berikutnya membahas varian dictionary secara mendalam: dict of lists dan dict of Series, termasuk aturan panjang data yang wajib dipatuhi.