Banyak orang datang ke pandas dengan bekal SQL, dan kabar baiknya: hampir semua kueri yang biasa ditulis di database punya padanan langsung di pandas. Pemetaan ini membantu dua arah — pengguna SQL membaca kode pandas lebih cepat, dan kode pandas yang sudah jadi mudah diterjemahkan kembali ke SQL saat datanya pindah ke warehouse. Bab ini berdiri sebagai peta konsep, bukan pengganti bab-bab teknis: setiap padanan di sini dibahas mendalam di section masing-masing. Contoh di bawah memakai dua tabel kecil, pelanggan dan pesanan, sehingga polanya mudah dikenali.
WHERE, SELECT, dan LIMIT #
SELECT nama FROM pelanggan WHERE kota = 'Jakarta' menjadi pelanggan.loc[mask, ["nama"]] — kolom dipilih lewat argumen kedua loc, dan baris difilter lewat mask boolean. Alternatifnya pelanggan.query("kota == 'Jakarta'") yang menuliskan kondisi sebagai string, paling dekat dengan rasa SQL. SELECT * setara dengan df utuh tanpa pemilihan kolom, sedangkan LIMIT n menjadi .head(n). Karena kolom di pandas bernama, bukan bernomor seperti huruf kolom spreadsheet, pemuatan mental yang tepat adalah: tabel SQL = DataFrame, kolom = Series dengan nama.
import pandas as pd
pelanggan = pd.DataFrame(
{
"id": [1, 2, 3],
"nama": ["Budi", "Siti", "Dewi"],
"kota": ["Jakarta", "Bandung", "Jakarta"],
}
)
pesanan = pd.DataFrame(
{
"id": [101, 102, 103],
"id_pelanggan": [1, 2, 1],
"total": [145_000, 230_000, 97_500],
}
)
# WHERE: SELECT nama FROM pelanggan WHERE kota = 'Jakarta'
print(pelanggan.loc[pelanggan["kota"] == "Jakarta", ["nama"]])
# JOIN: pesanan JOIN pelanggan ON id_pelanggan = id
gabung = pesanan.merge(pelanggan, left_on="id_pelanggan", right_on="id")
print(gabung[["nama", "total"]])
# GROUP BY: SELECT kota, SUM(total) ... GROUP BY kota
print(gabung.groupby("kota")["total"].sum())
# ORDER BY + LIMIT: ... ORDER BY total DESC LIMIT 1
print(gabung.nlargest(1, "total")[["nama", "total"]])Output yang Dihasilkan:
nama
0 Budi
2 Dewi
nama total
0 Budi 145000
1 Siti 230000
2 Budi 97500
kota
Bandung 230000
Jakarta 242500
Name: total, dtype: int64
nama total
1 Siti 230000Mari kita telaah baris-baris kuncinya:
- Baris 18-19: padanan
WHERE kota = 'Jakarta'hanya menampilkan kolomnama, dan indexnya tetap0dan2— bukan nomor baris baru. - Baris 22-23:
merge(left_on="id_pelanggan", right_on="id")adalahJOIN ... ON; hasilnya satu baris per pasangan pesanan-pelanggan. - Baris 26:
groupby("kota")["total"].sum()adalahGROUP BY kotadengan agregasiSUM(total). - Baris 29:
nlargest(1, "total")memainkan peranORDER BY total DESC LIMIT 1sekaligus.
GROUP BY, JOIN, dan UNION #
Tiga padanan yang paling sering dipakai menuntut pemetaan lebih teliti. GROUP BY menjadi groupby() plus fungsi agregasi pada kolom tertentu — bentuknya lebih panjang dari SQL tetapi bisa menghitung banyak agregat sekaligus lewat agg(). JOIN menjadi merge() dengan parameter on atau pasangan left_on/right_on bila nama kolomnya berbeda, dan jenis join-nya (INNER, LEFT, FULL) mengikuti parameter how. UNION ALL menjadi pd.concat() yang menumpuk dua tabel searah, dengan catatan UNION yang mendeduplusi perlu satu langkah drop_duplicates() di belakangnya.
HAVING, Subquery, dan CTE #
Konstruksi SQL yang lebih tinggi juga punya tempatnya. HAVING menjadi filter pada hasil groupby() — df.groupby("kota")["total"].sum().loc[lambda s: s > 200_000]. Subquery menjadi pemisahan variabel: hasil filter disimpan sebagai DataFrame lalu diproses lebih jauh, pola yang sebenarnya lebih mudah dibaca daripada subquery bertingkat. CTE (WITH) berpadanan dengan rangkaian variabel DataFrame bernama yang mengalir dari atas ke bawah sel skrip. Satu perbedaan mental yang perlu ditegakkan sejak awal: SQL mendeklarasikan hasil, sedangkan pandas mengeksekusi langkah demi langkah, sehingga urutan penugasan di skrip adalah urutan eksekusi yang sebenarnya.
Tabel padanan terakhir menuntut satu kemampuan yang tidak dimiliki SQL: operasi vektor per kolom tanpa berhenti pada agregasi. Bab berikutnya menyajikan pemetaan yang sama bagi pengguna spreadsheet, dunia yang lebih dekat dengan sel dan formula.
Dokumentasi resmi yang relevan: User Guide: Cookbook — Idioms SQL
yang menyajikan padanan query demi query, pandas.DataFrame.merge
untuk aturan parameter how, dan pandas.DataFrame.groupby
untuk pola split-apply-combine.