Pandas 12 - Operator Kullanımı
Prş 28 Temmuz 2022Operator Kullanımı
Atama Operatorleri
import pandas as pd
Aritmetik İşlem Operatörleri
sum() Metodu
Python'dan kullanmaya aşina olduğumuz sum() fonksiyonu, Pandas içerisinde metot olarak bulunuyor. Yani Python'da sum() fonksiyonuna parametre olarak değişken veriyorduk.
(Ör. sum(liste)). Pandasta ise veri çerçevesi adının sonuna metot olarak ekliyoruz.
(Ör. VeriCercevesi.sum()) Örneklerle inceleyelim.
baslik = ["Birler", "Onlar", "Yüzler"]
basliksiz = pd.read_excel("Veri_Setleri/basliksiz.ods", header = None, names = baslik )
print(basliksiz)
Birler | Onlar | Yüzler | |
---|---|---|---|
0 | 9 | 82 | 246 |
1 | 7 | 78 | 180 |
2 | 8 | 83 | 565 |
3 | 6 | 82 | 486 |
4 | 4 | 37 | 615 |
5 | 2 | 18 | 341 |
6 | 5 | 12 | 539 |
7 | 8 | 59 | 709 |
8 | 1 | 89 | 675 |
9 | 6 | 12 | 965 |
10 | 4 | 24 | 447 |
11 | 6 | 35 | 555 |
12 | 5 | 34 | 117 |
13 | 5 | 21 | 471 |
14 | 7 | 31 | 171 |
15 | 5 | 40 | 491 |
16 | 9 | 55 | 666 |
17 | 8 | 48 | 557 |
Elimizde, 17 satır ve 3 sütundan oluşan tablomuz var. Bakalım sum() metodunu kullanınca nasıl bir sonuç elde edeceğiz.
print(basliksiz.sum())
Birler 105
Onlar 840
Yüzler 8796
dtype: int64
Görüyoruz ki, sum() metodu sayesinde her sütunun toplam değerleri ekrana yazdırılıyor. Peki Tablodaki tüm değerlerin toplamını bulmak istersek ne yapmalıyız? sum() metodu bize 3 sütun başlığı ve 3 değer verdiğine göre, ikinci bir sum() metodu (yani sum() metodunu peşpeşe iki defa yazmak) bu değerlerin toplamını verir mi dersiniz? Deneyelim.
print(basliksiz.sum().sum())
9741
Tahmin ettiğimiz gibi, iki kez sum() metodu kullanmak, tüm veri çerçevesinin toplamını elde etmemizi sağladı.
mean() Metodu
Her sütun için ortalama değer hesaplamak için mean()
metodunu kullanabiliriz.
basliksiz.mean()
Birler 5.833333
Onlar 46.666667
Yüzler 488.666667
dtype: float64
Her satır için ortalama değer hesaplamak için ise axis = 1
parametresini ekleyin kodu çalıştırın;
basliksiz.mean(axis = 1)
0 112.333333
1 88.333333
2 218.666667
3 191.333333
4 218.666667
5 120.333333
6 185.333333
7 258.666667
8 255.000000
9 327.666667
10 158.333333
11 198.666667
12 52.000000
13 165.666667
14 69.666667
15 178.666667
16 243.333333
17 204.333333
dtype: float64
Toplama, Çıkarma, Çarpma ve Bölme İşlemleri
Veri çerçevesine yeni sütun ekleme konusunu işlerken buna benzer bir örnek uygulama yapmıştık. Sırayla işlemleri tek tek uygulayıp sonucu görelim.
Toplama Operatörü
Birler + Onlar isimli sütun oluşturup, Birler ve Onlar Sütunlarındaki değerleri toplayıp yeni sütuna dahil edelim.
basliksiz["Birler + Onlar"] = basliksiz["Birler"] + basliksiz["Onlar"]
print(basliksiz)
Birler | Onlar | Yüzler | Birler + Onlar | |
---|---|---|---|---|
0 | 9 | 82 | 246 | 91 |
1 | 7 | 78 | 180 | 85 |
2 | 8 | 83 | 565 | 91 |
3 | 6 | 82 | 486 | 88 |
4 | 4 | 37 | 615 | 41 |
5 | 2 | 18 | 341 | 20 |
6 | 5 | 12 | 539 | 17 |
7 | 8 | 59 | 709 | 67 |
8 | 1 | 89 | 675 | 90 |
9 | 6 | 12 | 965 | 18 |
10 | 4 | 24 | 447 | 28 |
11 | 6 | 35 | 555 | 41 |
12 | 5 | 34 | 117 | 39 |
13 | 5 | 21 | 471 | 26 |
14 | 7 | 31 | 171 | 38 |
15 | 5 | 40 | 491 | 45 |
16 | 9 | 55 | 666 | 64 |
17 | 8 | 48 | 557 | 56 |
Çıkarma Operatörü
Yüzler - Onlar isimli sütun oluşturup, Yüzler sütunundaki değerlerden Onlar Sütunundaki değerleri çıkarıp yeni sütuna dahil edelim.
basliksiz["Yüzler - Onlar"] = basliksiz["Yüzler"] - basliksiz["Onlar"]
print(basliksiz)
Birler | Onlar | Yüzler | Birler + Onlar | Yüzler - Onlar | |
---|---|---|---|---|---|
0 | 9 | 82 | 246 | 91 | 164 |
1 | 7 | 78 | 180 | 85 | 102 |
2 | 8 | 83 | 565 | 91 | 482 |
3 | 6 | 82 | 486 | 88 | 404 |
4 | 4 | 37 | 615 | 41 | 578 |
5 | 2 | 18 | 341 | 20 | 323 |
6 | 5 | 12 | 539 | 17 | 527 |
7 | 8 | 59 | 709 | 67 | 650 |
8 | 1 | 89 | 675 | 90 | 586 |
9 | 6 | 12 | 965 | 18 | 953 |
10 | 4 | 24 | 447 | 28 | 423 |
11 | 6 | 35 | 555 | 41 | 520 |
12 | 5 | 34 | 117 | 39 | 83 |
13 | 5 | 21 | 471 | 26 | 450 |
14 | 7 | 31 | 171 | 38 | 140 |
15 | 5 | 40 | 491 | 45 | 451 |
16 | 9 | 55 | 666 | 64 | 611 |
17 | 8 | 48 | 557 | 56 | 509 |
Çarpma Operatörü
Yüzler * Birler isimli sütun oluşturup, Yüzler sütunundaki değerleri Birler Sütunundaki değerlerle çarpıp yeni sütuna dahil edelim.
basliksiz["Yüzler * Birler"] = basliksiz["Yüzler"] * basliksiz["Birler"]
print(basliksiz)
Birler | Onlar | Yüzler | Birler + Onlar | Yüzler - Onlar | Yüzler * Birler | |
---|---|---|---|---|---|---|
0 | 9 | 82 | 246 | 91 | 164 | 2214 |
1 | 7 | 78 | 180 | 85 | 102 | 1260 |
2 | 8 | 83 | 565 | 91 | 482 | 4520 |
3 | 6 | 82 | 486 | 88 | 404 | 2916 |
4 | 4 | 37 | 615 | 41 | 578 | 2460 |
5 | 2 | 18 | 341 | 20 | 323 | 682 |
6 | 5 | 12 | 539 | 17 | 527 | 2695 |
7 | 8 | 59 | 709 | 67 | 650 | 5672 |
8 | 1 | 89 | 675 | 90 | 586 | 675 |
9 | 6 | 12 | 965 | 18 | 953 | 5790 |
10 | 4 | 24 | 447 | 28 | 423 | 1788 |
11 | 6 | 35 | 555 | 41 | 520 | 3330 |
12 | 5 | 34 | 117 | 39 | 83 | 585 |
13 | 5 | 21 | 471 | 26 | 450 | 2355 |
14 | 7 | 31 | 171 | 38 | 140 | 1197 |
15 | 5 | 40 | 491 | 45 | 451 | 2455 |
16 | 9 | 55 | 666 | 64 | 611 | 5994 |
17 | 8 | 48 | 557 | 56 | 509 | 4456 |
Bölme Operatörü
Yüzler / Onlar isimli sütun oluşturup, Yüzler sütunundaki değerleri Onlar Sütunundaki değerlere Bölüp yeni sütuna dahil edelim.
basliksiz["Yüzler * Onlar"] = basliksiz["Yüzler"] / basliksiz["Onlar"]
print(basliksiz)
Birler | Onlar | Yüzler | Birler + Onlar | Yüzler - Onlar | Yüzler * Birler | Yüzler * Onlar | |
---|---|---|---|---|---|---|---|
0 | 9 | 82 | 246 | 91 | 164 | 2214 | 3.000000 |
1 | 7 | 78 | 180 | 85 | 102 | 1260 | 2.307692 |
2 | 8 | 83 | 565 | 91 | 482 | 4520 | 6.807229 |
3 | 6 | 82 | 486 | 88 | 404 | 2916 | 5.926829 |
4 | 4 | 37 | 615 | 41 | 578 | 2460 | 16.621622 |
5 | 2 | 18 | 341 | 20 | 323 | 682 | 18.944444 |
6 | 5 | 12 | 539 | 17 | 527 | 2695 | 44.916667 |
7 | 8 | 59 | 709 | 67 | 650 | 5672 | 12.016949 |
8 | 1 | 89 | 675 | 90 | 586 | 675 | 7.584270 |
9 | 6 | 12 | 965 | 18 | 953 | 5790 | 80.416667 |
10 | 4 | 24 | 447 | 28 | 423 | 1788 | 18.625000 |
11 | 6 | 35 | 555 | 41 | 520 | 3330 | 15.857143 |
12 | 5 | 34 | 117 | 39 | 83 | 585 | 3.441176 |
13 | 5 | 21 | 471 | 26 | 450 | 2355 | 22.428571 |
14 | 7 | 31 | 171 | 38 | 140 | 1197 | 5.516129 |
15 | 5 | 40 | 491 | 45 | 451 | 2455 | 12.275000 |
16 | 9 | 55 | 666 | 64 | 611 | 5994 | 12.109091 |
17 | 8 | 48 | 557 | 56 | 509 | 4456 | 11.604167 |
Mantıksal / Karşılaştırma Operatörleri
Bu konuya da diğer bölümlerde değinmiştik, Konu başlığı bu bölüme ait olduğu için tekrar anlatmakta farar görüyorum.
Mantıksal Operatorler (Boolean), True (Doğru) ya da False (Yanlış) çıktı verirler. Veri çerçevemizdeki değer ya da metinlerin (string ifadelerin) belirlenen değerlere uyup uymadığına dair çıktı almak ya da hesap yapmak için kullanılabilir.
Bu Operatörler;
- Büyüktür (>),
- Küçüktür (<),
- Eşittir (==),
- Eşit Değildir (!=),
- İçerir (contains),
- İçermez / Değil (not)
örnek olarak verilebilir.
Şimdi bu operatorleri inceleyelim. Öncelikle varolan tablolarımızda birini içe aktarıp veri çerçevesine dönüştürelim.
json = pd.read_json("Veri_Setleri/json_verisi.json")
json
Duration | Pulse | Maxpulse | Calories | |
---|---|---|---|---|
0 | 60 | 110 | 130 | 409 |
1 | 60 | 117 | 145 | 479 |
2 | 60 | 103 | 135 | 340 |
3 | 45 | 109 | 175 | 282 |
4 | 45 | 117 | 148 | 406 |
5 | 60 | 102 | 127 | 300 |
Büyüktür (>) ve Küçüktür (<) Operatörleri
Veri çerçevemizde 110'dan büyük verileri bulmaya çalışalım. Bu işlemi büyüktür (>) operatörü ile yapacağız.
json > 110
Duration | Pulse | Maxpulse | Calories | |
---|---|---|---|---|
0 | False | False | True | True |
1 | False | True | True | True |
2 | False | False | True | True |
3 | False | False | True | True |
4 | False | True | True | True |
5 | False | False | True | True |
Gördüğünüz gibi, tablodaki tüm değerler verilen kriter olan 110'dan büyük olup olmadığına göre sorgulandı ve cevabı her bir hücreye işlendi.
Sütunlarda, Değeri 110'dan büyük kaçar adet sayı olduğunu bulmak istersek;
(json > 110).sum()
Duration 0
Pulse 2
Maxpulse 6
Calories 6
dtype: int64
Veri çerçevemizde, 110'dan büyük toplam kaç adet sayı vardır, diye merak edersek;
(json > 110).sum().sum()
14
Küçüktür (<) operatörünün kullanımı da aynıdır. Veri çerçevemizdeki, 150'den küçük verileri görelim.
json < 150
Duration | Pulse | Maxpulse | Calories | |
---|---|---|---|---|
0 | True | True | True | False |
1 | True | True | True | False |
2 | True | True | True | False |
3 | True | True | False | False |
4 | True | True | True | False |
5 | True | True | True | False |
Eşittir (==) ve Eşit Değil (!=) Operatörleri
Eşittir (==) ya da bir başka deyimle Eşit midir? operatörü :) (Eşitse True değeri döndür demektir)
Veri çerçevemizde 60'a eşit değerleri bulalım. Bunu == operatörü ile tespit edeceğiz.
json == 60
Duration | Pulse | Maxpulse | Calories | |
---|---|---|---|---|
0 | True | False | False | False |
1 | True | False | False | False |
2 | True | False | False | False |
3 | False | False | False | False |
4 | False | False | False | False |
5 | True | False | False | False |
Veri çerçevemizde 60'a eşit kaç adet toplam değer var?
(json == 60).sum().sum()
4
Veri çerçevemizde 117'ye eşit olmayan sayı var mı? Varsa "True" diye göster.
json != 117
Duration | Pulse | Maxpulse | Calories | |
---|---|---|---|---|
0 | True | True | True | True |
1 | True | False | True | True |
2 | True | True | True | True |
3 | True | True | True | True |
4 | True | False | True | True |
5 | True | True | True | True |
Veri çerçevemizde 117'den farklı kaç sayı var?
Bunların Sütun dağılımları nasıl?
(json != 117).sum().sum()
22
(json != 117).sum()
Duration 6
Pulse 4
Maxpulse 6
Calories 6
dtype: int64
İçerir / İçermez Operatörleri
Bu konuyu, Metin bazlı (string ifadeler) veri çerçeveleri ile daha rahat anlatabileceğimi düşünüyorum. Hemen yeni bir Veri çerçevesi oluşturalım.
nba = pd.read_csv("Veri_Setleri/nba.csv")
print(nba)
Name | Team | Number | Position | Age | Height | Weight | College | Salary | |
---|---|---|---|---|---|---|---|---|---|
0 | Avery Bradley | Boston Celtics | 0.0 | PG | 25.0 | 6-2 | 180.0 | Texas | 7730337.0 |
1 | Jae Crowder | Boston Celtics | 99.0 | SF | 25.0 | 6-6 | 235.0 | Marquette | 6796117.0 |
2 | John Holland | Boston Celtics | 30.0 | SG | 27.0 | 6-5 | 205.0 | Boston University | NaN |
3 | R.J. Hunter | Boston Celtics | 28.0 | SG | 22.0 | 6-5 | 185.0 | Georgia State | 1148640.0 |
4 | Jonas Jerebko | Boston Celtics | 8.0 | PF | 29.0 | 6-10 | 231.0 | NaN | 5000000.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
453 | Shelvin Mack | Utah Jazz | 8.0 | PG | 26.0 | 6-3 | 203.0 | Butler | 2433333.0 |
454 | Raul Neto | Utah Jazz | 25.0 | PG | 24.0 | 6-1 | 179.0 | NaN | 900000.0 |
455 | Tibor Pleiss | Utah Jazz | 21.0 | C | 26.0 | 7-3 | 256.0 | NaN | 2900000.0 |
456 | Jeff Withey | Utah Jazz | 24.0 | C | 26.0 | 7-0 | 231.0 | Kansas | 947276.0 |
457 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
458 rows × 9 columns
nba isimli veri çerçevemizde isminin içinde Jordan kelimesi bulunan kaç adet oyunucu olduğunu bulmaya çalışalım. Bunu, String Metotlarında contains() ile tespit etmeye çalışacağız.
print(nba["Name"].str.contains("Jordan").sum())
8
İsim-Soyisim içinde Jordan kelimesi bulunan oyuncuların hangi sütunda kaç adet verisi bulunuyor?
jordan = nba["Name"].str.contains("Jordan")
print(nba.groupby(jordan).count())
Name | Name | Team | Number | Position | Age | Height | Weight | College | Salary |
---|---|---|---|---|---|---|---|---|---|
False | 449 | 449 | 449 | 449 | 449 | 449 | 449 | 365 | 439 |
True | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 7 |
nba2 = nba.dropna()
print(nba2)
Name | Team | Number | Position | Age | Height | Weight | College | Salary | |
---|---|---|---|---|---|---|---|---|---|
0 | Avery Bradley | Boston Celtics | 0.0 | PG | 25.0 | 6-2 | 180.0 | Texas | 7730337.0 |
1 | Jae Crowder | Boston Celtics | 99.0 | SF | 25.0 | 6-6 | 235.0 | Marquette | 6796117.0 |
3 | R.J. Hunter | Boston Celtics | 28.0 | SG | 22.0 | 6-5 | 185.0 | Georgia State | 1148640.0 |
6 | Jordan Mickey | Boston Celtics | 55.0 | PF | 21.0 | 6-8 | 235.0 | LSU | 1170960.0 |
7 | Kelly Olynyk | Boston Celtics | 41.0 | C | 25.0 | 7-0 | 238.0 | Gonzaga | 2165160.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
449 | Rodney Hood | Utah Jazz | 5.0 | SG | 23.0 | 6-8 | 206.0 | Duke | 1348440.0 |
451 | Chris Johnson | Utah Jazz | 23.0 | SF | 26.0 | 6-6 | 206.0 | Dayton | 981348.0 |
452 | Trey Lyles | Utah Jazz | 41.0 | PF | 20.0 | 6-10 | 234.0 | Kentucky | 2239800.0 |
453 | Shelvin Mack | Utah Jazz | 8.0 | PG | 26.0 | 6-3 | 203.0 | Butler | 2433333.0 |
456 | Jeff Withey | Utah Jazz | 24.0 | C | 26.0 | 7-0 | 231.0 | Kansas | 947276.0 |
364 rows × 9 columns
isimler = nba2["Name"]
jrd = isimler.str.contains("Jordan")
print(nba2[jrd])
Name | Team | Number | Position | Age | Height | Weight | College | Salary | |
---|---|---|---|---|---|---|---|---|---|
6 | Jordan Mickey | Boston Celtics | 55.0 | PF | 21.0 | 6-8 | 235.0 | LSU | 1170960.0 |
98 | DeAndre Jordan | Los Angeles Clippers | 6.0 | C | 27.0 | 6-11 | 265.0 | Texas A&M | 19689000.0 |
110 | Jordan Clarkson | Los Angeles Lakers | 6.0 | PG | 24.0 | 6-5 | 194.0 | Missouri | 845059.0 |
175 | Jordan McRae | Cleveland Cavaliers | 12.0 | SG | 25.0 | 6-5 | 179.0 | Tennessee | 111196.0 |
201 | Jordan Hill | Indiana Pacers | 27.0 | C | 28.0 | 6-10 | 235.0 | Arizona | 4000000.0 |
257 | Jordan Adams | Memphis Grizzlies | 3.0 | SG | 21.0 | 6-5 | 209.0 | UCLA | 1404600.0 |
289 | Jordan Hamilton | New Orleans Pelicans | 25.0 | SG | 25.0 | 6-7 | 220.0 | Texas | 1015421.0 |