Tidak semua data datang dalam bentuk yang sudah berlabel. Hasil parse file teks biasanya berupa list of lists, sedangkan hasil perhitungan numerik biasanya berupa array NumPy dua dimensi; keduanya tidak membawa nama kolom sedikit pun. pd.DataFrame() tetap menerima sumber-sumber tanpa label ini, tetapi konsekuensinya jelas: kita yang harus menyediakan nama kolom lewat parameter columns. Chapter ini membahas kedua sumber tersebut, termasuk perilaku tipe data yang mengikutinya.

List of Lists Tanpa Nama Kolom #

Pada list of lists, setiap list bagian dalam adalah satu baris, dan urutan posisi menentukan kolomnya. Tanpa parameter columns, pandas hanya bisa menomori kolom secara polos: 0, 1, 2, dan seterusnya. Tabel tetap sah, tetapi namanya tidak bermakna sehingga sulit diolah.

python
import numpy as np
import pandas as pd

data_kasir = [
    ["Budi", "Bandung", 12],
    ["Siti", "Jakarta", 8],
    ["Dewi", "Surabaya", 15],
]
tanpa_label = pd.DataFrame(data_kasir)
print(tanpa_label)
print()

penjualan = pd.DataFrame(data_kasir, columns=["kasir", "kota", "qty"])
print(penjualan)
print()

matriks = np.array([
    [32000, 45],
    [18000, 120],
    [28000, 30],
])
harga_stok = pd.DataFrame(matriks, columns=["harga", "stok"])
print(harga_stok)
print(harga_stok.dtypes)

Output yang Dihasilkan:

text
      0         1   2
0  Budi   Bandung  12
1  Siti   Jakarta   8
2  Dewi  Surabaya  15

  kasir      kota  qty
0  Budi   Bandung   12
1  Siti   Jakarta    8
2  Dewi  Surabaya   15

   harga  stok
0  32000    45
1  18000   120
2  28000    30
harga    int64
stok     int64
dtype: object

Mari kita telaah kode di atas:

  1. Baris 4-8 (data kasir Toko Buah Segar): tiga list bagian dalam menjadi tiga baris; posisi pertama adalah nama kasir, posisi kedua kota, posisi ketiga jumlah transaksi.
  2. Baris 9-10 (tanpa_label = pd.DataFrame(data_kasir)): output pertama menunjukkan header 0, 1, 2. Header ini hanyalah nomor posisi, bukan makna data.
  3. Baris 13-14 (columns=["kasir", "kota", "qty"]): parameter columns memberi label bermakna dan sekaligus menetapkan urutannya. Output kedua kini terbaca layaknya tabel sungguhan.
  4. Baris 17-24 (array NumPy): np.array dua dimensi diperlakukan persis seperti list of lists, satu baris per baris array, dengan nama kolom yang kembali kita sediakan lewat columns.

DataFrame dari Array NumPy #

Array NumPy adalah wadah data numerik yang homogen: seluruh elemennya bertipe sama, sehingga operasi aritmetika berjalan efisien. Ketika data analisis sudah berupa array, misalnya hasil dari perhitungan atau konversi dari sumber lain, kita tidak perlu mengubahnya ke Python terlebih dahulu; pd.DataFrame() langsung menerima array dua dimensi. DataFrame hasilnya memakai memori array itu secara efisien, dan nilai-nilainya siap dianalisis lewat kolom. Pengetahuan dasar NumPy yang relevan dirangkum di dokumentasi NumPy bila ingin membaca lebih jauh.

Pada output ketiga di atas, tabel harga_stok memuat angka harga dan stok Toko Buah Segar yang berasal dari np.array. Perhatikan baris terakhir output: harga_stok.dtypes melaporkan int64 untuk kedua kolom, karena seluruh elemen array adalah bilangan bulat.

Tipe Data Hasil Konversi #

Tipe kolom pada DataFrame dari array mengikuti tipe array sumbernya. Array int64 menghasilkan kolom int64; array berisi satu saja float akan menghasilkan seluruh kolom float64, karena array NumPy menuntut homogenitas. Perilaku ini berbeda dengan pembuatan dari dictionary, di mana setiap kolom ditentukan isinya sendiri-sendiri dan kolom teks menjadi str. Aturan praktisnya: tipe mengikuti sumber, dan label mengikuti columns.

Rangkaian chapter pembuatan hampir lengkap; parameter columns yang kita pakai di sini hanyalah salah satu dari banyak parameter yang dirinci di halaman pandas.DataFrame . Kita sudah bisa membangun tabel dari berbagai sumber, tetapi tabel itu sendiri masih berupa kotak hitam: siapa label barisnya, apa nama kolomnya, dan bagaimana keduanya bekerja. Chapter berikutnya membongkar dua sumbu berlabel tersebut, index dan columns, yang menjadi kerangka seluruh DataFrame.