Pandas - String_Metotlari
Cum 15 Temmuz 2022String Metotları
Python ile kodlama yaparken, metinsel ifadelerle uğraştığımızda kullandığımız string metotlarını hatırlarsınız. Örneğin, Metinlerin tümünü büyük harfe ya da küçük harfe
çevirmek. Bu tür string metotları Pandas ile kulanmak ve veri çerçevesine uygulamak mümkün. Bunun için str
ifadesini kullanabiliriz.
Önce Bir Veri Çerçevesi oluşturalım ve gözatalım.
sozluk = {"isim" : ["Mustafa", "Halil", "Burak", "Emre", "Ersin", "Sertaç", "Furkan","Murat","Ahmet","Abdülkadir"],
"yaş" : [25, 38, 41, 23, 37, 52, 30, 23, 40, 38],
"iş-meslek" : ["mühendis", "programcı", "akademisyen", "yönetici","amir","mühendis", "yönetici","müdür","veteriner","yönetici"]}
veri = pd.DataFrame(sozluk)
print(veri)
isim | yaş | iş-meslek | |
---|---|---|---|
0 | Mustafa | 25 | mühendis |
1 | Halil | 38 | programcı |
2 | Burak | 41 | akademisyen |
3 | Emre | 23 | yönetici |
4 | Ersin | 37 | amir |
5 | Sertaç | 52 | mühendis |
6 | Furkan | 30 | yönetici |
7 | Murat | 23 | müdür |
8 | Ahmet | 40 | veteriner |
9 | Abdülkadir | 38 | yönetici |
upper()
Veri çerçevemizim sütun başlıklarının tüm karakterlerini büyük harfe çevirelim.
veri.columns = veri.columns.str.upper()
print(veri)
ISIM | YAŞ | IŞ-MESLEK | |
---|---|---|---|
0 | Mustafa | 25 | mühendis |
1 | Halil | 38 | programci |
2 | Burak | 41 | akademisyen |
3 | Emre | 23 | yönetici |
4 | Ersin | 37 | amir |
5 | Sertaç | 52 | mühendis |
6 | Furkan | 30 | yönetici |
7 | Murat | 23 | müdür |
8 | Ahmet | 40 | veteriner |
9 | Abdülkadir | 38 | yönetici |
Şimdi de Veri Çerçevemizin iş-meslek sütunundaki tüm metinleri büyük harfe çevirip ekrana yazdıralım.
print(veri["iş-meslek"].str.upper())
0 MÜHENDIS
1 PROGRAMCI
2 AKADEMISYEN
3 YÖNETICI
4 AMIR
5 MÜHENDIS
6 YÖNETICI
7 MÜDÜR
8 VETERINER
9 YÖNETICI
Name: iş-meslek, dtype: object
Uyguladığımız metot sonrası, veri çerçevemizi tekrar çağırdığımızda, iş-meslek sütunundaki metinlerin değişmediğini, eski halinde kaldığını göreceğiz. Bunu sebebi, yaptığımız değişikliği bir değişken olarak alıp, iş-meslek sütununa atamamaktır. İfade etmeye çalıştığım şeyin, aşağıdaki satırda daha net anlaşılacağını düşünüyorum. Atama işlem sonrası Veri çerçevemizi çağırıp değişikiğin uygulandığını görüyoruz.
veri["iş-meslek"] = veri["iş-meslek"].str.upper()
print(veri)
ISIM | YAŞ | IŞ-MESLEK | |
---|---|---|---|
0 | Mustafa | 25 | MÜHENDIS |
1 | Halil | 38 | PROGRAMCI |
2 | Burak | 41 | AKADEMISYEN |
3 | Emre | 23 | YÖNETICI |
4 | Ersin | 37 | AMIR |
5 | Sertaç | 52 | MÜHENDIS |
6 | Furkan | 30 | YÖNETICI |
7 | Murat | 23 | MÜDÜR |
8 | Ahmet | 40 | VETERINER |
9 | Abdülkadir | 38 | YÖNETICI |
lower()
İlk oluşturulan veri çerçevemizdeki isim sütunundaki verilerin tüm karakterlerini küçük harfe çevirelim.
veri.isim = veri.isim.str.lower()
print(veri)
isim | yaş | iş-meslek | |
---|---|---|---|
0 | mustafa | 25 | mühendis |
1 | halil | 38 | programcı |
2 | burak | 41 | akademisyen |
3 | emre | 23 | yönetici |
4 | ersin | 37 | amir |
5 | sertaç | 52 | mühendis |
6 | furkan | 30 | yönetici |
7 | murat | 23 | müdür |
8 | ahmet | 40 | veteriner |
9 | abdülkadir | 38 | yönetici |
capitalize()
İlk oluşturulan veri çerçevemizdeki iş-meslek Sütunundaki verilerin sadece baş harflerini büyük yapalım.
veri["iş-meslek"] = veri["iş-meslek"].str.capitalize()
print(veri)
isim | yaş | iş-meslek | |
---|---|---|---|
0 | Mustafa | 25 | Mühendis |
1 | Halil | 38 | Programci |
2 | Burak | 41 | Akademisyen |
3 | Emre | 23 | Yönetici |
4 | Ersin | 37 | Amir |
5 | Sertaç | 52 | Mühendis |
6 | Furkan | 30 | Yönetici |
7 | Murat | 23 | Müdür |
8 | Ahmet | 40 | Veteriner |
9 | Abdülkadir | 38 | Yönetici |
contains
String metotlarından biri olan contains ile metin içerisinde içeren kelime ya da kelimeleri aratabiliyoruz. lower()
metodu ile isim sütunundaki tüm karakterleri küçük harfe çevirelim ve ardından isim içinde er ibaresi bulunan tüm verileri filtreleyelim.
veri.isim = veri.isim.str.lower()
iceren = veri.isim.str.contains("er")
print(veri[iceren])
isim | yaş | iş-meslek | |
---|---|---|---|
4 | ersin | 37 | amir |
5 | sertaç | 52 | mühendis |
Görüldüğü üzere 4. ve 5. indekslerdeki ersin ve sertaç ifadelerinin içerisinde er ibaresi bulunduğu için filtre işlemi sonucu yukarıdaki çıktıya ulaşıyoruz.
Benzer sonuca aşağıdaki kod ile de ulaşabiliriz.
iceren = veri.isim.str.lower().str.contains("er")
print(veri[iceren])
isim | yaş | iş-meslek | |
---|---|---|---|
4 | Ersin | 37 | amir |
5 | Sertaç | 52 | mühendis |
Son iki tabloyu incelerseniz İsim sütunundaki verilerin büyük-küçük harf değerlerinin farklı olduğunu görebilirsiniz.
Yeni bir veri seti ile bir örnek daha yapalı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, sum()
metodu ve 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 |
Eksik ve Kayıp verileri temizlersek;
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
Veri satır sayımız 458'den 364'e düşmüş oldu.
Şimdi Name sütunu içerisinde Jordon kelimesi geçen tüm verileri görelim.
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 |