SQL’in okunabilirliğini görmek için, çeşitli penguen bilgilerini içeren penguins adlı bir tabloya (dataframe) sahip olduğumuzu varsayalım (ve bu eğitimde ileride böyle bir tabloyla çalışacağız). Yalnızca erkek olan ve yüzgeç uzunluğu 210 mm’den fazla olan penguen türlerinin tüm benzersizlerini çıkarmak için pandas’ta şu koda ihtiyaç duyarız:
Aynı bilgiyi SQL kullanarak elde etmek için ise aşağıdaki kodu çalıştırırız:
SQL ile yazılmış ikinci kod parçası neredeyse doğal bir İngilizce cümle gibidir ve bu nedenle çok daha sezgiseldir. Okunabilirliğini birden çok satıra yayarak daha da artırabiliriz:
Artık pandas için SQL kullanmanın avantajlarını belirlediğimize göre, ikisini teknik olarak nasıl birleştirebileceğimize bakalım.
pandasql Nasıl Kullanılır
pandasql Python kütüphanesi, herhangi bir SQL sunucusuna bağlanmaya gerek kalmadan SQL komutları çalıştırarak pandas dataframe’lerini sorgulamanıza olanak tanır. Arka planda SQLite söz dizimini kullanır, herhangi bir pandas dataframe’ini otomatik olarak algılar ve onu sıradan bir SQL tablosu gibi ele alır.
Ortamınızı hazırlama
Önce pandasql’i kurmamız gerekiyor:
Ardından gerekli paketleri içe aktarırız:
Yukarıda, pandasql’den doğrudan sqldf() fonksiyonunu içe aktardık; bu, kütüphanenin pratikte tek anlamlı fonksiyonudur. Adının da önerdiği gibi, dataframe’leri SQL söz dizimiyle sorgulamak için kullanılır. Bu fonksiyona ek olarak pandasql, load_births() ve load_meat() gibi kendini açıklayan fonksiyonlarla yüklenebilen iki basit yerleşik veri kümesiyle birlikte gelir.
pandasql Söz Dizimi
sqldf() fonksiyonunun söz dizimi oldukça basittir:
Burada query, SQL sorgusunu string olarak alan zorunlu bir parametredir; env ise isteğe bağlı (ve nadiren faydalı) bir parametredir; locals() veya globals() olabilir ve sqldf() fonksiyonunun Python ortamınızdaki ilgili değişken kümesine erişmesine izin verir.
sqldf() fonksiyonu, bir sorgunun sonucunu pandas dataframe’i olarak döndürür.
pandasql’i ne zaman kullanabiliriz
pandasql kütüphanesi, SQL’in alt kümelerinden biri olan Veri Sorgulama Dili’ni (DQL) kullanarak verilerle çalışmaya olanak tanır. Başka bir deyişle, pandasql ile bir veritabanında depolanan veriler üzerinde gerekli bilgileri almak için sorgular çalıştırabiliriz. Özellikle verilere erişebilir, çıkarabilir, filtreleyebilir, sıralayabilir, gruplandırabilir, birleştirebilir, toplamalar yapabilir ve üzerinde matematiksel ya da mantıksal işlemler gerçekleştirebiliriz.
pandasql’i ne zaman kullanamayız
pandasql, DQL dışında SQL’in diğer alt kümelerinin kullanılmasına izin vermez. Bu, pandasql’i tabloları değiştirmek (güncellemek, budamak, eklemek vb.) veya bir tablodaki verileri değiştirmek (güncellemek, silmek veya eklemek) için uygulayamayacağımız anlamına gelir.
Ayrıca, bu kütüphane SQL söz dizimine dayandığı için, SQLite’taki bilinen tuhaflıklara karşı dikkatli olmalıyız.
pandasql kullanımı örnekleri
Şimdi, pandasql’in sqldf() fonksiyonunu kullanarak pandas dataframe’leri üzerinde SQL sorgularının nasıl çalıştırılacağına daha ayrıntılı bakalım. Alıştırma yapacak veri olması için, seaborn kütüphanesinin yerleşik veri kümelerinden biri olan penguins’i yükleyelim:
Çıktı:
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
SQL becerilerinizi tazelemeniz gerekiyorsa, SQL Fundamentals beceri yolumuz iyi bir referans noktasıdır.
pandasql ile veri çıkarma
Çıktı:
species island
0 Adelie Torgersen
1 Adelie Torgersen
2 Adelie Torgersen
3 Adelie Torgersen
4 Adelie Torgersen
Yukarıda, penguins dataframe’inden ilk beş penguenin tür ve ada bilgilerini çıkardık. sqldf() fonksiyonunu çalıştırmanın bir pandas dataframe’i döndürdüğüne dikkat edin:
Çıktı:
Yalnızca pandas ile şöyle olurdu:
Çıktı:
species island
0 Adelie Torgersen
1 Adelie Torgersen
2 Adelie Torgersen
3 Adelie Torgersen
4 Adelie Torgersen
Bir diğer örnek, bir sütundaki benzersiz değerleri çıkarmaktır:
Çıktı:
Pandas’ta şöyle olurdu:
Çıktı:
pandasql ile veri sıralama
Çıktı:
Yukarıda, penguenleri vücut kütlesine göre azalan düzende sıraladık ve en yüksek beş vücut kütlesi değerini gösterdik.
Pandas’ta şöyle olurdu:
Çıktı:
pandasql ile veri filtreleme
Pandas’ta neden SQL kullanılır bölümünde bahsettiğimiz aynı örneği deneyelim: Yalnızca erkek olan ve yüzgeç uzunluğu 210 mm’den fazla olan penguen türlerinin benzersizlerini çıkarma:
print(sqldf('''SELECT DISTINCT species
FROM penguins
WHERE sex = 'Male'
AND flipper_length_mm > 210'''))
Çıktı:
species
0 Chinstrap
1 Gentoo
Yukarıda, verileri iki koşula göre filtreledik: sex = 'Male' ve flipper_length_mm > 210.
Pandas’taki aynı kod biraz daha göz korkutucu görünebilir:
print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())
Çıktı:
['Chinstrap' 'Gentoo']
pandasql ile gruplama ve toplulaştırma
Şimdi, dataframe’de her bir tür için en uzun gaga uzunluğunu bulmak üzere veri gruplama ve toplulaştırma uygulayalım:
Çıktı:
Pandas’taki aynı kod:
Çıktı:
pandasql ile matematiksel işlemler yapma
pandasql ile veriler üzerinde kolayca matematiksel veya mantıksal işlemler yapabiliriz. Diyelim ki her bir penguen için gaga uzunluğu/derinliği oranını hesaplamak ve bu ölçümün en yüksek beş değerini göstermek istiyoruz:
print(sqldf('''SELECT bill_length_mm / bill_depth_mm AS length_to_depth
FROM penguins
ORDER BY length_to_depth DESC
LIMIT 5'''))
Çıktı:
Dikkat edin, bu kez oran değerlerini içeren sütun için length_to_depth takma adını kullandık. Aksi halde, bill_length_mm / bill_depth_mm gibi hantal bir sütun adı elde ederdik.
Pandas’ta ise önce oran değerleriyle yeni bir sütun oluşturmamız gerekir:
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())
Çıktı:
Sonuç
Özetle, bu eğitimde, daha iyi ve daha verimli kod yazmak için pandas için SQL işlevselliğini neden ve ne zaman birleştirebileceğimizi inceledik. Bu amaçla pandasql kütüphanesinin nasıl kurulup kullanılacağını ve bu paketin hangi sınırlamalara sahip olduğunu tartıştık. Son olarak, pandasql’in pratik uygulamasına dair çok sayıda popüler örneği ele aldık ve her durumda kodu pandas karşılığıyla kıyasladık.
Artık gerçek dünya projelerinde pandas için SQL uygulamak adına ihtiyaç duyduğunuz her şeye sahipsiniz. Pratik yapmak için harika bir yer, güçlü SQL desteğine sahip DataCamp’in yapay zekâ destekli veri not defteri DataLab’dir.

Bu eğitimde, pandas çerçevesinde SQL işlevselliğini ne zaman ve nasıl (ve ne zaman kullanamayacağımızı) kullanabileceğimizi ele alacağız. Ayrıca bu yaklaşımın çeşitli örneklerini inceleyip sonuçları yalnızca pandas ile yazılmış eşdeğer kodla karşılaştıracağız.
Neden pandas’ta SQL Kullanalım?
Pandas veri analizi için her şeyi kapsayan bir paketken neden SQL’i pandas ile birlikte kullanmak isteyelim?
Cevap şu: Bazı durumlarda, özellikle de karmaşık programlarda, SQL sorguları karşılık gelen pandas koduna kıyasla çok daha anlaşılır ve okunması kolay görünür. Bu, özellikle önce verilerle çalışmak için SQL kullanıp sonradan pandas öğrenen kişiler için geçerlidir.