SQL Sorgularının Python Pandas Dataframe Karşılıkları (PANDAS SQL)-1 (SELECT, WHERE)
Merhabalar. Bu yazımızda yaygın kullanılan SQL sorgularının Python pandas dataframe karşılıklarını (Pandas SQL) bir örnek üzerinden paylaşmaya çalışacağım. Veri biliminin en zor ve meşakkatli aşaması veri hazırlığıdır. Hem SQL hem de pandas kendi alanlarında veri hazırlığında çok önemli rol oynarlar. Eğer bu ikisinden birini çok iyi bilmiyorsanız (Pythonistler için söylüyorum, sql yanındaki python değil R, Spark vb. olabilir) veri biliminde hiçbir ciddi proje yapamazsınız. Çünkü gerçek dünyada algoritmaya sunulacak veri asla kek gibi karşınızda durmaz. Ne yazık ki genelde tırnaklarınızla kazıyarak veriyi sağdan soldan alır, getirir, birleştirir, temizler ve kullanılacak hale getirirsiniz. İşte bu safhada SQL ve Pandas eliniz ayağınız her şeyiniz olur. Bu yazımızın amacı SQL’i bilen ancak pandas ile veri manipülasyonunu iyi bilmeyenlere SQL ile düşünüp bunu pandas ile nasıl uygulayacağını göstermektir.
Pandas dataframe oluşturmak için kullanılacak csv dosyasına buradan ulaşabilirsiniz. SQL veri tabanı olarak PostgreSQL kullandık. Burada tablo yaratmak ve içine veri girmek için aşağıdaki kodları kullanabilirsiniz.
DROP TABLE public.simple_data; CREATE TABLE public.simple_data ( sirano varchar(50) NULL, isim varchar(50) NULL, yas int4 NULL, meslek varchar(50) NULL, sehir varchar(50) NULL, aylik_gelir float8 NULL ); INSERT INTO public.simple_data (sirano, isim, yas, meslek, sehir, aylik_gelir) VALUES (1,'Cemal',35,'Isci','Ankara',3500), (2,'Ceyda',42,'Memur','Kayseri',4200), (3,'Timur',30,'Müzisyen','Istanbul',9000), (4,'Burcu',29,'Pazarlamaci','Ankara',4200), (5,'Yasemin',23,'','Bursa',4800), (6,'Ali',33,'Memur','Ankara',4250), (7,'Dilek',29,'Pazarlamaci','Istanbul',7300), (8,'Murat',31,'Müzisyen','Istanbul',12000), (9,'Ahmet',33,'Doktor','Ankara',18000), (10,'Muhittin',46,'Berber','Istanbul',12000), (11,'Hicaziye',47,'Tuhafiyeci','Ankara',4800), (12,'Harun',43,'Tornacı','Ankara',4200), (13,'Hakkı',33,'Memur','Çorum',3750), (14,'Gülizar',37,'Doktor','İzmir',14250), (15,'Şehmuz',41,'','Ankara',8700), (16,'Gençay',46,'Berber','Ankara',8800), (16,'Gençay',46,'Berber','Ankara',8800);
Pandas Dataframe Okuma
import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/erkansirin78/datasets/master/simple_data.csv") df.head()
sirano | isim | yas | meslek | sehir | aylik_gelir | |
---|---|---|---|---|---|---|
0 | 1 | Cemal | 35 | Isci | Ankara | 3500 |
1 | 2 | Ceyda | 42 | Memur | Kayseri | 4200 |
2 | 3 | Timur | 30 | Müzisyen | Istanbul | 9000 |
3 | 4 | Burcu | 29 | Pazarlamaci | Ankara | 4200 |
4 | 5 | Yasemin | 23 | NaN | Bursa | 4800 |
1. SELECT
select sirano, isim, yas, meslek, sehir, aylik_gelir from public.simple_data limit 5
sirano | isim | yas | meslek | sehir | aylik_gelir |
---|---|---|---|---|---|
1 | Cemal | 35 | Isci | Ankara | 3500 |
2 | Ceyda | 42 | Memur | Kayseri | 4200 |
3 | Timur | 30 | Müzisyen | Istanbul | 9000 |
4 | Burcu | 29 | Pazarlamaci | Ankara | 4200 |
5 | Yasemin | 23 | Bursa | 4800 |
Pandas ile
df[['sirano', 'isim', 'yas', 'meslek', 'sehir', 'aylik_gelir']] \ .head(5)
sirano | isim | yas | meslek | sehir | aylik_gelir | |
---|---|---|---|---|---|---|
0 | 1 | Cemal | 35 | Isci | Ankara | 3500 |
1 | 2 | Ceyda | 42 | Memur | Kayseri | 4200 |
2 | 3 | Timur | 30 | Müzisyen | Istanbul | 9000 |
3 | 4 | Burcu | 29 | Pazarlamaci | Ankara | 4200 |
4 | 5 | Yasemin | 23 | NaN | Bursa | 4800 |
2. WHERE
select * from simple_data where sehir = 'Istanbul' limit 5
sirano | isim | yas | meslek | sehir | aylik_gelir |
---|---|---|---|---|---|
3 | Timur | 30 | Müzisyen | Istanbul | 9000 |
7 | Dilek | 29 | Pazarlamaci | Istanbul | 7300 |
8 | Murat | 31 | Müzisyen | Istanbul | 12000 |
10 | Muhittin | 46 | Berber | Istanbul | 12000 |
Pandas ile
df[df['sehir'] == 'Istanbul'].head(5)
sirano | isim | yas | meslek | sehir | aylik_gelir | |
---|---|---|---|---|---|---|
2 | 3 | Timur | 30 | Müzisyen | Istanbul | 9000 |
6 | 7 | Dilek | 29 | Pazarlamaci | Istanbul | 7300 |
7 | 8 | Murat | 31 | Müzisyen | Istanbul | 12000 |
9 | 10 | Muhittin | 46 | Berber | Istanbul | 12000 |
Where cümleciğinde birden fazla koşul ile filtreleme
select * from simple_data where sehir = 'Istanbul' and yas > 40 limit 5
sirano | isim | yas | meslek | sehir | aylik_gelir |
---|---|---|---|---|---|
10 | Muhittin | 46 | Berber | Istanbul | 12000 |
Pandas ile
df[ (df['sehir'] == 'Istanbul') & (df['yas'] > 40)].head(5)
sirano | isim | yas | meslek | sehir | aylik_gelir | |
---|---|---|---|---|---|---|
9 | 10 | Muhittin | 46 | Berber | Istanbul | 12000 |
Bu yazımızı burada biritelim serimize bir sonraki yazı ile devam edeceğiz.
Emeğinize sağlık. Bilgilendirici oldu.