Untuk melihat keterbacaan SQL secara langsung, misalkan kita memiliki sebuah tabel (dataframe) bernama penguins yang berisi berbagai informasi tentang penguin (dan kita akan bekerja dengan tabel seperti itu nanti dalam tutorial ini). Untuk mengekstrak semua spesies penguin unik yang berjenis kelamin jantan dan memiliki panjang sirip lebih dari 210 mm, kita memerlukan kode berikut di pandas:
Sebagai gantinya, untuk mendapatkan informasi yang sama menggunakan SQL, kita akan menjalankan kode berikut:
Potongan kode kedua, yang ditulis dalam SQL, terlihat hampir seperti kalimat bahasa Inggris alami dan karenanya jauh lebih intuitif. Kita dapat lebih meningkatkan keterbacaannya dengan membaginya ke beberapa baris:
Sekarang setelah kita mengidentifikasi keunggulan menggunakan SQL untuk pandas, mari lihat bagaimana kita dapat menggabungkannya secara teknis.
Cara Menggunakan pandasql
Pustaka Python pandasql memungkinkan menjalankan kueri pada dataframe pandas dengan perintah SQL tanpa harus terhubung ke server SQL mana pun. Di balik layar, pustaka ini menggunakan sintaks SQLite, secara otomatis mendeteksi setiap dataframe pandas, dan memperlakukannya sebagai tabel SQL biasa.
Menyiapkan lingkungan Anda
Pertama, kita perlu memasang pandasql:
Lalu, kita impor paket yang diperlukan:
Di atas, kita langsung mengimpor fungsi sqldf() dari pandasql, yang praktis merupakan satu-satunya fungsi yang bermakna dari pustaka tersebut. Sesuai namanya, fungsi ini diterapkan untuk menjalankan kueri pada dataframe menggunakan sintaks SQL. Selain fungsi ini, pandasql hadir dengan dua set data bawaan sederhana yang dapat dimuat menggunakan fungsi yang jelas namanya, yaitu load_births() dan load_meat().
Sintaks pandasql
Sintaks fungsi sqldf() sangat sederhana:
Di sini, query adalah parameter wajib yang menerima kueri SQL sebagai string, dan env—parameter opsional (dan jarang berguna) yang bisa berupa locals() atau globals() dan memungkinkan sqldf() mengakses sekumpulan variabel terkait di lingkungan Python Anda.
Fungsi sqldf() mengembalikan hasil kueri sebagai dataframe pandas.
Kapan kita dapat menggunakan pandasql
Pustaka pandasql memungkinkan bekerja dengan data menggunakan Data Query Language (DQL), yang merupakan salah satu subset SQL. Dengan kata lain, dengan pandasql, kita dapat menjalankan kueri pada data yang tersimpan dalam basis data untuk mengambil informasi yang diperlukan. Secara khusus, kita dapat mengakses, mengekstrak, memfilter, mengurutkan, mengelompokkan, menggabungkan, melakukan agregasi data, serta menjalankan operasi matematis atau logis atas data tersebut.
Kapan kita tidak dapat menggunakan pandasql
pandasql tidak memungkinkan penggunaan subset SQL lain selain DQL. Ini berarti kita tidak dapat menerapkan pandasql untuk memodifikasi (update, truncate, insert, dll.) tabel atau mengubah (update, delete, atau insert) data dalam sebuah tabel.
Selain itu, karena pustaka ini berbasis pada sintaks SQL, kita perlu mewaspadai keanehan yang diketahui di SQLite.
Contoh penggunaan pandasql
Sekarang, kita akan melihat lebih rinci cara menjalankan kueri SQL pada dataframe pandas menggunakan fungsi sqldf() dari pandasql. Agar ada data untuk berlatih, mari muat salah satu set data bawaan dari pustaka seaborn—penguins:
Keluaran:
species island bill_length_mm bill_depth_mm flipper_length_mm \
0 Adelie Torgersen 39.1 18.7 181.0
1 Adelie Torgersen 39.5 17.4 186.0
2 Adelie Torgersen 40.3 18.0 195.0
3 Adelie Torgersen NaN NaN NaN
4 Adelie Torgersen 36.7 19.3 193.0
body_mass_g sex
0 3750.0 Male
1 3800.0 Female
2 3250.0 Female
3 NaN NaN
4 3450.0 Female
Jika Anda perlu menyegarkan kembali keterampilan SQL, SQL Fundamentals skill track kami adalah titik rujukan yang baik.
Menarik data dengan pandasql
Keluaran:
species island
0 Adelie Torgersen
1 Adelie Torgersen
2 Adelie Torgersen
3 Adelie Torgersen
4 Adelie Torgersen
Di atas, kita mengekstrak informasi tentang spesies dan lokasi untuk lima penguin pertama dari dataframe penguins. Perhatikan bahwa menjalankan fungsi sqldf() mengembalikan sebuah dataframe pandas:
Keluaran:
Dalam pandas murni, akan seperti ini:
Keluaran:
species island
0 Adelie Torgersen
1 Adelie Torgersen
2 Adelie Torgersen
3 Adelie Torgersen
4 Adelie Torgersen
Contoh lain adalah mengekstrak nilai unik dari sebuah kolom:
Keluaran:
Di pandas, akan seperti ini:
Keluaran:
Mengurutkan data dengan pandasql
Keluaran:
Di atas, kita mengurutkan penguin berdasarkan massa tubuh secara menurun dan menampilkan lima nilai massa tubuh teratas.
Di pandas, akan seperti ini:
Keluaran:
Memfilter data dengan pandasql
Mari coba contoh yang sama yang kita sebutkan di bab Mengapa menggunakan SQL di pandas: mengekstrak spesies penguin unik yang berjenis kelamin jantan dan memiliki panjang sirip lebih dari 210 mm:
print(sqldf('''SELECT DISTINCT species
FROM penguins
WHERE sex = 'Male'
AND flipper_length_mm > 210'''))
Keluaran:
species
0 Chinstrap
1 Gentoo
Di atas, kita memfilter data berdasarkan dua kondisi: sex = 'Male' dan flipper_length_mm > 210.
Kode yang sama di pandas terlihat sedikit lebih rumit:
print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())
Keluaran:
['Chinstrap' 'Gentoo']
Mengelompokkan dan mengagregasi data dengan pandasql
Sekarang, mari terapkan pengelompokan dan agregasi data untuk mencari panjang paruh terpanjang untuk setiap spesies dalam dataframe:
Keluaran:
Kode yang sama di pandas:
Keluaran:
Melakukan operasi matematis dengan pandasql
Dengan pandasql, kita dapat dengan mudah melakukan operasi matematis atau logis pada data. Misalkan kita ingin menghitung rasio panjang terhadap kedalaman paruh untuk setiap penguin dan menampilkan lima nilai teratas dari pengukuran ini:
print(sqldf('''SELECT bill_length_mm / bill_depth_mm AS length_to_depth
FROM penguins
ORDER BY length_to_depth DESC
LIMIT 5'''))
Keluaran:
Perhatikan bahwa kali ini, kita menggunakan alias length_to_depth untuk kolom dengan nilai rasio. Jika tidak, kita akan mendapatkan kolom dengan nama yang sangat panjang bill_length_mm / bill_depth_mm.
Di pandas, kita perlu terlebih dahulu membuat kolom baru dengan nilai rasio:
penguins['length_to_depth'] = penguins['bill_length_mm'] / penguins['bill_depth_mm']
print(penguins['length_to_depth'].sort_values(ascending=False, ignore_index=True).head())
Keluaran:
Kesimpulan
Sebagai penutup, dalam tutorial ini, kita mengeksplorasi mengapa dan kapan kita dapat menggabungkan fungsionalitas SQL untuk pandas guna menulis kode yang lebih baik dan lebih efisien. Kita membahas cara menyiapkan dan menggunakan pustaka pandasql untuk tujuan ini serta keterbatasan paket ini. Terakhir, kita meninjau berbagai contoh populer penerapan praktis pandasql dan, pada setiap kasus, membandingkan kodenya dengan padanan di pandas.
Sekarang Anda memiliki semua yang diperlukan untuk menerapkan SQL untuk pandas dalam proyek dunia nyata. Tempat yang tepat untuk berlatih adalah DataLab, notebook data bertenaga AI dari DataCamp dengan dukungan SQL yang hebat.

Dalam tutorial ini, kita akan membahas kapan dan bagaimana kita bisa (dan kapan tidak bisa) menggunakan fungsionalitas SQL dalam kerangka kerja pandas. Selain itu, kita akan melihat berbagai contoh penerapan pendekatan ini dan membandingkan hasilnya dengan kode ekuivalen di pandas murni.
Mengapa Menggunakan SQL di pandas?
Mengapa perlu menggabungkan SQL dengan pandas ketika pandas sendiri sudah merupakan paket lengkap untuk analisis data?
Jawabannya adalah bahwa pada beberapa kasus, terutama untuk program yang kompleks, kueri SQL terlihat jauh lebih lugas dan mudah dibaca dibandingkan kode yang setara di pandas. Hal ini khususnya benar bagi mereka yang awalnya menggunakan SQL untuk bekerja dengan data lalu kemudian mempelajari pandas.