Pandas adalah library Python, yaitu pustaka kode siap pakai, yang menjadi alat baku analisis data tabular. Topik ini membahas definisi mekanis pandas, dua struktur data utamanya, posisi pandas dibanding NumPy dan SQL, serta ringkasan pemilihannya dalam bentuk tabel. Setelah topik ini selesai dibaca, peran pandas di dalam ekosistem Python dapat dijelaskan beserta alasan memilihnya untuk pekerjaan data tabular.
Dua struktur data berlabel#
Pandas menyediakan dua struktur data berlabel, yaitu Series untuk satu kolom data dan DataFrame untuk tabel dengan banyak kolom. Setiap nilai pada Series dipasangkan dengan satu label baris yang disebut index, sehingga nilai dapat dicari melalui labelnya dan bukan hanya melalui posisinya. DataFrame memperluas gagasan itu ke dua dimensi, yaitu setiap kolom memiliki nama dan seluruh kolom berbagi index yang sama.
Kedua struktur tersebut dibuat melalui konstruktor pd.Series dan pd.DataFrame. Contoh berikut membuat Series berisi pembacaan suhu tiga ruangan beserta label ruangannya.
import pandas as pd
suhu = pd.Series([24.1, 23.8, 26.5], index=["Lab A", "Lab B", "Ruang Arsip"], name="suhu_c")
print(suhu)
print(suhu["Lab B"])Lab A 24.1
Lab B 23.8
Ruang Arsip 26.5
Name: suhu_c, dtype: float64
23.8Keluarannya menampilkan kolom label di sebelah kiri, kolom nilai di sebelah kanan, lalu nama dan tipe data Series pada bagian akhir. Pemanggilan suhu["Lab B"] mengambil satu nilai melalui labelnya, tanpa perlu mengingat nilai itu tersimpan pada posisi ke berapa. Pola berlabel seperti ini terasa wajar untuk data pengukuran per ruangan, daftar nilai ujian per peserta, atau catatan antrean per tiket.
DataFrame menampung banyak kolom sekaligus dengan tipe data yang berbeda-beda antarkolom.
import pandas as pd
df = pd.DataFrame({
"ruang": ["Lab A", "Lab B", "Ruang Arsip"],
"suhu_c": [24.1, 23.8, 26.5],
"lembap_pct": [55.0, 61.2, 48.9],
})
print(df)
print(df.dtypes) ruang suhu_c lembap_pct
0 Lab A 24.1 55.0
1 Lab B 23.8 61.2
2 Ruang Arsip 26.5 48.9
ruang str
suhu_c float64
lembap_pct float64
dtype: objectBaris dtypes pada keluaran menampilkan tipe data setiap kolom yang disebut dtype. Kolom teks menggunakan dtype string khusus yang tampil sebagai str, sedangkan kolom angka bertipe float64. Pada pandas 2.x, kolom teks masih tampil sebagai object, sehingga materi lama yang menyebut object berasal dari versi tersebut. Satu DataFrame dapat menampung teks dan angka berdampingan karena penyimpanannya diatur per kolom, dan struktur campur semacam inilah yang tidak dapat ditampung array NumPy tanpa mengonversi seluruh isinya.
pandas dibanding array NumPy#
Array NumPy menyimpan satu dtype untuk seluruh isinya, sedangkan pandas menyimpan satu dtype per kolom beserta label barisnya. Perbedaan ini terasa ketika satu tabel berisi teks dan angka sekaligus, karena pembuatan array NumPy, yaitu struktur data numerik berdimensi N tanpa label, dari tabel campur memaksa seluruh sel dikonversi menjadi string.
import numpy as np
arr = np.array([["Lab A", 24.1], ["Lab B", 23.8]])
print(arr.dtype)
print(arr[0, 1] + arr[1, 1])<U32
24.123.8Tipe <U32 adalah string Unicode sepanjang paling banyak 32 karakter, dan seluruh sel array dipaksa masuk ke tipe itu. Akibatnya, penjumlahan arr[0, 1] + arr[1, 1] menghasilkan 24.123.8, yaitu dua teks yang digabung, dan bukan 47.9 sebagai hasil hitung suhu. Rata-rata, pembulatan, dan agregasi lain juga tidak dapat dihitung sebelum kolom angkanya dikonversi secara terpisah. pandas menyelesaikan masalah ini secara bawaan karena setiap kolom menyimpan dtype sendiri, sehingga df["suhu_c"].mean() langsung menghasilkan angka yang benar.
Alasan lain memilih pandas adalah I/O bawaan. Fungsi read_csv, read_excel, dan read_parquet membaca berkas data ke dalam DataFrame dalam satu baris kode, sedangkan NumPy tidak menyediakan pembaca untuk format data tabel semacam itu. Pembahasan lengkapnya ada pada modul Membaca dan Menulis Data. NumPy tetap menjadi pilihan yang tepat untuk komputasi numerik murni yang homogen, misalnya perhitungan matriks pada algoritma numerik, dan pada praktiknya kedua alat ini digunakan berdampingan dalam satu proyek.
pandas dibanding SQL#
SQL menghitung kueri di dalam server basis data, sedangkan pandas mengolah data sepenuhnya di dalam memori program Python. Model di dalam memori (in-memory) berarti seluruh data yang sedang dianalisis dimuat lebih dahulu ke RAM, kemudian setiap langkah penyaringan, agregasi, dan pengubahan bentuk dikerjakan oleh proses Python itu sendiri. Satu berkas Python dapat memuat seluruh alur analisis, mulai dari membaca data sampai menghasilkan grafik, tanpa perpindahan antar alat. Kode analisis juga berdampingan dengan kode Python lain, sehingga hasilnya dapat digunakan oleh fungsi, uji otomatis, atau aplikasi di dalam proyek yang sama.
SQL tetap menjadi pilihan yang tepat ketika data berukuran besar tinggal di server basis data. Penyaringan dan agregasi yang dijalankan di server memindahkan jauh lebih sedikit data ke program Python dibanding menyalin seluruh tabel terlebih dahulu. Keduanya tidak saling menggantikan karena pandas menyediakan read_sql untuk mengeksekusi kueri SQL dan menampung hasilnya sebagai DataFrame. Pola kerja yang lazim adalah SQL merampingkan data di server, lalu pandas menuntaskan analisis rinci di memori.
Ringkasan pemilihan alat#
Pemilihan antara array NumPy, pandas, dan SQL ditentukan oleh bentuk data dan lokasi pemrosesannya. Tabel berikut merangkum perbedaan ketiganya pada aspek yang paling sering menjadi pertimbangan.
| Aspek | Array NumPy | pandas | SQL |
|---|---|---|---|
| Struktur data | array N dimensi | Series dan DataFrame berlabel | tabel pada server basis data |
| Label baris | tidak ada, hanya posisi | index eksplisit | kunci primer bila ditetapkan |
| Tipe data | satu dtype untuk seluruh array | satu dtype per kolom | satu tipe per kolom |
| Lokasi proses | memori program Python | memori program Python | server basis data |
| Gaya kerja | operasi array | metode pada objek DataFrame | kueri deklaratif |
Tabel di atas diringkas menjadi tiga keputusan praktis. Data numerik homogen yang menjadi bahan perhitungan matriks cukup ditangani array NumPy. Data tabular campur tipe yang memerlukan label, pembersihan, dan agregasi cocok ditangani pandas. Data besar yang tinggal di server basis data disaring terlebih dahulu dengan SQL sebelum sebagian kecilnya ditarik ke pandas. Pada pekerjaan data sehari-hari, ketiganya sering digunakan berurutan di dalam satu berkas analisis yang sama.
Ringkasan#
- pandas menyediakan Series dan DataFrame, yaitu struktur data berlabel yang menyimpan nilai bersama label baris dan nama kolom.
- Setiap kolom DataFrame menyimpan dtype sendiri, sehingga teks dan angka dapat hidup berdampingan dalam satu tabel.
- pandas mengolah data sepenuhnya di memori program Python, sedangkan SQL menghitung kueri di server basis data, dan
read_sqlmenghubungkan keduanya. - NumPy tetap dipilih untuk komputasi numerik homogen, dan pandas dibangun di atasnya.
Referensi#
- Intro to data structures — pandas documentation — pengenalan resmi Series dan DataFrame beserta cara pembuatannya.
- 10 minutes to pandas — pandas documentation — tur singkat resmi yang memperkenalkan struktur data, seleksi, dan operasi dasar pandas.