Düzenleme Yöntemleri

Bu bölümde, Oluşturulan Veri Çerçevelerinin düzenlemesine dair pek çok komut, fonksiyon ve parametre öğreneceğiz. Pandas kullanırken en fazla ihtiyaç duyacağımız Yöntemlerin bir kısmını bu bölümde ele alacak, anlatacağız.

İndeks Değerlerini Ayarlamak

index_col Parametresi

Veri Çerçevesi (Data Frame) oluştururken sütunlardan birini, indeks değeri olarak ayarlamak/atamak istersek, index_col parametresini kullanabiliriz. Öncelikle elimizdeki excel dosyamızı veri çerçevesine dönüştürüp içeriğine göz atalım.

import pandas as pd
dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx", sheet_name = "ortalama")
print(dogumlar).head()
Yıl Toplam Ortalama
0 2001 1323341 110278.416667
1 2002 1229555 102462.916667
2 2003 1198927 99910.583333
3 2004 1222484 101873.666667
4 2005 1244041 103670.083333

Oluşan veri çerçevesindeki Yıl sütununu indeks olarak ayarlayalım.

dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx", sheet_name = "ortalama", index_col=0)
print(dogumlar.head())
Toplam Ortalama
Yıl
2001 1323341 110278.416667
2002 1229555 102462.916667
2003 1198927 99910.583333
2004 1222484 101873.666667
2005 1244041 103670.083333

İşlem başarılı. Yıl Sütunu, indeks olarak ayarlandı.

set_index() metodu

Veri Çerçevelerinin oluştururken, indeks değerlerini index_col parametresi ile ayarlayabildiğimiz gibi İstersek Veri Çerçevesini oluşturduktan sonra da, set_index() metodu ile de indeks değerlerini değiştirebilir / atayabiliriz. dogumlar isimli veri çerçevemizi yeniden oluşturup indeks başlığı set_index() metodu ile değiştirelim.

dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx")
print(dogumlar)
Yıl Toplam Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım Aralık
0 2001 1323341 170397 103476 107912 102585 110391 111722 119752 120963 109590 103662 92554 70337
1 2002 1229555 155065 103446 102175 95976 99501 102627 109747 108061 99701 96216 89285 67755
2 2003 1198927 138670 89548 101046 92574 99531 104644 109225 109159 98766 94838 89542 71384
3 2004 1222484 141538 94596 100696 100801 102214 105728 111102 110425 98492 94840 90833 71219
4 2005 1244041 142311 94234 100529 97441 106833 108536 111066 111430 103273 103310 92364 72714
5 2006 1255432 128708 94760 104126 97624 103903 112016 115097 117298 107158 105773 93167 75802
6 2007 1289992 131276 93927 102807 100159 108119 110359 122324 118169 111055 109888 99639 82270
7 2008 1295511 130424 98099 102962 102877 107003 110089 119977 120048 114470 107978 97389 84195
8 2009 1266751 122407 92414 99419 103432 103783 107847 117160 116229 115824 105407 96155 86674
9 2010 1261169 119444 95023 103583 99477 103676 109441 113639 113082 110324 104427 101610 87443
10 2011 1252812 118547 92484 100992 95348 94131 104086 114390 121152 112959 105048 102970 90705
11 2012 1294605 119556 99966 105499 98880 105807 110056 118649 123634 110338 108327 102413 91480
12 2013 1297505 118373 94803 102471 96865 106757 109672 123758 121625 112913 110716 104182 95370
13 2014 1351088 121694 96802 105603 105652 112448 115978 129616 126296 119030 111754 105566 100649
14 2015 1336908 120373 99169 105792 103110 105254 115681 130945 123296 116428 112839 106319 97702
15 2016 1316204 114274 100640 105166 101947 104080 117994 120126 124833 114366 107951 104959 99868
16 2017 1299419 114968 95567 101700 96132 106274 115827 122894 122386 110811 108538 104386 99936
17 2018 1255258 107530 90002 101283 94776 104719 110383 117967 116715 107105 107818 100436 96524
18 2019 1188524 104044 85510 96631 93013 105166 97965 112628 109182 99981 98320 92936 93148
19 2020 1115821 94888 83433 89503 88526 93159 99232 105970 100478 96018 93428 87540 83646
20 2021 1079842 80733 77535 86214 82789 88506 94266 99252 100407 97334 93290 92189 87327

Veri çerçevesini yeniden (AyaGöreDoğumlar.xlsx isimli excel doyasından içe aktararak) oluşturduğumuz ve index_col parametresi kullanmadığımız için, İndeks değerleri Pandas tarafından otomatik olarak oluşturuldu. Bu kez de Toplam isimli sütun değerlerini set_index metoduyla, indeks değerleri olarak atayalım.

print(dogumlar.set_index("Toplam"))
Yıl Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım Aralık
Toplam
1323341 2001 170397 103476 107912 102585 110391 111722 119752 120963 109590 103662 92554 70337
1229555 2002 155065 103446 102175 95976 99501 102627 109747 108061 99701 96216 89285 67755
1198927 2003 138670 89548 101046 92574 99531 104644 109225 109159 98766 94838 89542 71384
1222484 2004 141538 94596 100696 100801 102214 105728 111102 110425 98492 94840 90833 71219
1244041 2005 142311 94234 100529 97441 106833 108536 111066 111430 103273 103310 92364 72714
1255432 2006 128708 94760 104126 97624 103903 112016 115097 117298 107158 105773 93167 75802
1289992 2007 131276 93927 102807 100159 108119 110359 122324 118169 111055 109888 99639 82270
1295511 2008 130424 98099 102962 102877 107003 110089 119977 120048 114470 107978 97389 84195
1266751 2009 122407 92414 99419 103432 103783 107847 117160 116229 115824 105407 96155 86674
1261169 2010 119444 95023 103583 99477 103676 109441 113639 113082 110324 104427 101610 87443
1252812 2011 118547 92484 100992 95348 94131 104086 114390 121152 112959 105048 102970 90705
1294605 2012 119556 99966 105499 98880 105807 110056 118649 123634 110338 108327 102413 91480
1297505 2013 118373 94803 102471 96865 106757 109672 123758 121625 112913 110716 104182 95370
1351088 2014 121694 96802 105603 105652 112448 115978 129616 126296 119030 111754 105566 100649
1336908 2015 120373 99169 105792 103110 105254 115681 130945 123296 116428 112839 106319 97702
1316204 2016 114274 100640 105166 101947 104080 117994 120126 124833 114366 107951 104959 99868
1299419 2017 114968 95567 101700 96132 106274 115827 122894 122386 110811 108538 104386 99936
1255258 2018 107530 90002 101283 94776 104719 110383 117967 116715 107105 107818 100436 96524
1188524 2019 104044 85510 96631 93013 105166 97965 112628 109182 99981 98320 92936 93148
1115821 2020 94888 83433 89503 88526 93159 99232 105970 100478 96018 93428 87540 83646
1079842 2021 80733 77535 86214 82789 88506 94266 99252 100407 97334 93290 92189 87327

Sütunları Atla

usecols Parametresi

Bir Excel çalışma sayfasını ya da farklı kaynaktan alınan veriyi, Pandas ile Veri Çerçevesine (DataFrame'e) dönüştürürken, bazı sütunları atlamamız / göz ardı etmemiz gerekebilir, bunu usecols parametresi kullanarak yapabiliriz. Bu parametre, tamsayı (int), metin (str), list-like veya callable (varsayılan None) değerlerini alır. Sütun adlarının veya konumlarının listesini belirtmek için, bir dize (string) listesi veya bir tamsayı (int) listesi kullanmalıyız.

Aylara Göre Doğum Sayıları tablosunu yukarıda görmüştük. Bu tabloda 14 sütun bulunmaktadır. Sadece istediğimiz aylara ait sütun bilgilerini görüntülemek istersek usecols parametresine ya ay isimlerini ya da ayın sütun indis değerini yazmamız gerekir. Her iki kullanımı da görelim.

dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx", usecols=["Yıl", "Ocak", "Haziran", "Ağustos"])
print(dogumlar.head())
Yıl Ocak Haziran Ağustos
0 2001 170397 111722 120963
1 2002 155065 102627 108061
2 2003 138670 104644 109159
3 2004 141538 105728 110425
4 2005 142311 108536 111430
dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx", usecols=[0,2,7,9])
print(dogumlar.head())
Yıl Ocak Haziran Ağustos
0 2001 170397 111722 120963
1 2002 155065 102627 108061
2 2003 138670 104644 109159
3 2004 141538 105728 110425
4 2005 142311 108536 111430

usecols parametresine, sütun isimlerini yazarken, sütun isimleri metinsel (string) ifade olduğu için çift tırnak işareti " kullandığımıza, indis değeri yazarken , indis değerleri tamsayı (int) olduğu için, tırnak işareti kullanmadığımıza dikkat edin.

Ayrıca, usecols parametresini, sütun aralığı belirterek te kullanabiliriz. Veri çerçevemizin sütunlarını, Excel programının sütun isimleri gibi (A, B, C,... şeklinde) düşünerek aralık belirtebiliriz. Aşağıdaki örnek, ne demek istediğimi daha net anlatacaktır.

dogumlar = pd.read_excel("Veri_Setleri/AyaGöreDoğumlar.xlsx", usecols="C:G")
print(dogumlar.head())
Ocak Şubat Mart Nisan Mayıs
0 170397 103476 107912 102585 110391
1 155065 103446 102175 95976 99501
2 138670 89548 101046 92574 99531
3 141538 94596 100696 100801 102214
4 142311 94234 100529 97441 106833

Oluşturduğumuz Veri Çerçevemizdeki Yıl Sütunu A'ya, Toplam sütunu B'ye, Ocak Sütunu da C'ye denk geldiği için, çıktımız Ocak Ayından başlayıp G sütununa denk gelen Mayıs ayına kadar olan aralığı alarak çıktı olarak bize sundu.

Satırları Atla

skiprows Parametresi

Bir Excel çalışma sayfasını ya da farklı kaynaktan alınan veriyi, Pandas ile Veri Çerçevesine (DataFrame'e) dönüştürürken, bazı satırları atlamamız / göz ardı etmemiz gerekebilir, bunu skiprows parametresi kullanarak yapabiliriz. Bu, parametre olarak, list-like, tamsayı (int) veya callable (isteğe bağlı) değerlerini alır. Bu parametre ile ilk birkaç satırı, seçilen satırı ve belirttiğimiz satır aralığını atlayabiliriz.

basliksiz = pd.read_excel("Veri_Setleri/SatırAtla.xlsx")
print(basliksiz.head(10))
Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3
0 mhg NaN NaN NaN
1 NaN NaN 654 NaN
2 NaN NaN NaN NaN
3 Film_Adı Yıl Puan Oylayan_Kişi
4 The Shawshank Redemption 1994 9,2 1071904
5 The Godfather 1972 9,2 751381
6 The Godfather: Part II 1974 9 488889
7 Pulp Fiction 1994 8,9 830504
8 The Dark Knight 2008 8,9 1045186
9 12 Angry Men 1957 8,9 264112

Atlamak / gözardı etmek istediğimiz satırları tek tek te belirtebiliriz.

basliksiz = pd.read_excel("Veri_Setleri/SatırAtla.xlsx", skiprows=[0,1,2,3,5,8,10,12])
print(basliksiz.head(10))
Film_Adı Yıl Puan Oylayan_Kişi
0 The Godfather 1972 9,2 751381
1 The Godfather: Part II 1974 9 488889
2 The Dark Knight 2008 8,9 1045186
3 Schindler's List 1993 8,9 545703
4 Fight Club 1999 8,8 814389
5 Star Wars: Episode V - The Empire Strikes Back 1980 8,8 519895
6 The Lord of the Rings: The Fellowship of the R... 2001 8,8 784999
7 One Flew Over the Cuckoo's Nest 1975 8,7 447005
8 Goodfellas 1990 8,7 465445
9 Seven Samurai 1954 8,7 161969

Sütun Ekle

Veri çerçevesine yeni bir sütun ekleyip bu sütuna değer atamak mümkündür. Bunu şu yöntemle yapabiliriz.

 Veri_Çerçevesi_Adı["Yeni_Sütun_Adı"] = Atanacak_Değerler

Örneğin NBA oyuncularının çeşitli bilgilerinin bulunduğu veri çerçevesinden, yıllık kazanç miktarlarını (Salary) 12'ye bölerek aylık kazançlarını hesaplayarak, Aylık Kazanç isimli yeni sütuna yazmaya çalışalım. Önce Veri çerçevemizin orijinal haline göz atalım.

veri = pd.read_csv("Veri_Setleri/nba.csv")
print(veri)
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

Şimdi istediğimizi yapmaya (yıllık kazanç miktarlarını (Salary) 12'ye bölerek aylık kazançları, Aylık Kazanç isimli yeni sütuna yazmaya) sıra geldi.

veri["Aylık Kazanç"] = veri["Salary"] / 12
print(veri)
Name Team Number Position Age Height Weight College Salary Aylık Kazanç
0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0 644194.750000
1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 566343.083333
2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN NaN
3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 95720.000000
4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0 416666.666667
... ... ... ... ... ... ... ... ... ... ...
453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0 202777.750000
454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0 75000.000000
455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0 241666.666667
456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0 78939.666667
457 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

458 rows × 10 columns

Satır ya da Sütun Sil

Veri çerçevesine ekleme yapılabildiği gibi, silme / çıkarma işlemi de yapılabiliyor. Bunun için drop() metodu kullanılıyor.

drop() Metodu

Bu metodun kullanım/yazım şekli aşağıdaki gibidir.

Veri_Çerçevesi_Adı.drop("Satır ya da Sütun Adı", axis = 0 ya da 1, inplace = True ya da False)

axis Parametresi

Sıfır (0) Satırları, Bir (1) Sütunları temsil eder. Varsayılan (default) değeri 0'dır. Aynı isme ait satır ve sütun bilgisi olması durumunda, bu parametre satırın mı, sütunun mu silinmesi gerektiği konusunda bize yardımcı olur.

inplace Parametresi

Gerçekleştirilen silme işleminin veri çerçevesinde kalıcı ya da geçici olmasını ayarladığımız kısımdır. inplace = True yazılırsa, yapılan işlem kalıcı hale gelecektir.

NBA oyuncularının bilgilerinin bulunduğu veri çerçevesinden, Yaş (Age) bilgisini silmeye çalışalım.

veri.drop("Age", axis = 1, inplace=True)
print(veri)
Name Team Number Position Height Weight College Salary Aylık Kazanç
0 Avery Bradley Boston Celtics 0.0 PG 6-2 180.0 Texas 7730337.0 644194.750000
1 Jae Crowder Boston Celtics 99.0 SF 6-6 235.0 Marquette 6796117.0 566343.083333
2 John Holland Boston Celtics 30.0 SG 6-5 205.0 Boston University NaN NaN
3 R.J. Hunter Boston Celtics 28.0 SG 6-5 185.0 Georgia State 1148640.0 95720.000000
4 Jonas Jerebko Boston Celtics 8.0 PF 6-10 231.0 NaN 5000000.0 416666.666667
... ... ... ... ... ... ... ... ... ...
453 Shelvin Mack Utah Jazz 8.0 PG 6-3 203.0 Butler 2433333.0 202777.750000
454 Raul Neto Utah Jazz 25.0 PG 6-1 179.0 NaN 900000.0 75000.000000
455 Tibor Pleiss Utah Jazz 21.0 C 7-3 256.0 NaN 2900000.0 241666.666667
456 Jeff Withey Utah Jazz 24.0 C 7-0 231.0 Kansas 947276.0 78939.666667
457 NaN NaN NaN NaN NaN NaN NaN NaN NaN

458 rows × 9 columns

Gördüğünüz gibi veri çerçevemizde artık Oyuncuların Yaş bilgilerini barındıran Age isimli sütun bulunmuyor, tamemiyle silindi.

Birden fazla satır ya da sütun silmek istediğimiz zaman ....

String 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

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

Şimdi de 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

Son olarak ta, veri çerçevemizim sütun başlıklarını büyük karfe ç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

concat() Fonksiyonu

concat kelimesi Concatenate kelimesinin kısaltamasıdır. Concatenate kelimesininTürkçe karşılığı Birleştir'dir.

Birleştirme örneklerini öğrenemek için öncelikle 2 sözlük yapısı oluşturup, bunları veri çerçevesine dönüştürelim.

veri1 = {'A': ['A1','A2','A3','A4'],'B': ['B1','B2','B3','B4'],'C': ['C1','C2','C3','C4']}
veri2 = {'A': ['A5','A6','A7','A8'],'B': ['B5','B6','B7','B8'],'C': ['C5','C6','C7','C8']}
df1 = pd.DataFrame(veri1, index = [1,2,3,4])
df2 = pd.DataFrame(veri2, index = [5,6,7,8])
print(df1)
A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
print(df2)
A B C
5 A5 B5 C5
6 A6 B6 C6
7 A7 B7 C7
8 A8 B8 C8

oluşturduğumuz/dönüştürdüğümüz veri çerçevelerini, concat fonksiyonu ile birleştirelim. Bunun için concat fonksiyonuna en az iki adet veri çevçevesi eklemek gerekir. Malumunuz, Pandas Veri Çerçevelerinde birden fazla satır, sütun,...vb ekleneceği zaman, bu değerler köşeli parantez içerisinde yani liste olarak yazılmalı.

print(pd.concat([df1, df2]))
A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
5 A5 B5 C5
6 A6 B6 C6
7 A7 B7 C7
8 A8 B8 C8

Gördüğünüz gibi, iki veri çerçevesi altalta birleştirildi.

Hatırlarsanız drop metodunu anlatırken axis parametresinden bahsetmiştik. axis parametresi, 0 ve 1 değerlerini alır, 0 satırları, 1 ise sütunları temsil eder demiştik. Aynı parametreyi birleştirme işleminde de kullanabiliriz. eğer axis parametresi kullanılmaz ise, varsayılan değer axis = 0 olduğu için yani satırları baz alarak birleştirme yapılır.

Şimdi axis=1 parametresini ekelyerek veri çerçevelerini yanyana birleştirmeyi deneyelim.

print(pd.concat([df1, df2], axis = 1))
A B C A B C
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN
4 A4 B4 C4 NaN NaN NaN
5 NaN NaN NaN A5 B5 C5
6 NaN NaN NaN A6 B6 C6
7 NaN NaN NaN A7 B7 C7
8 NaN NaN NaN A8 B8 C8

Bu durumda, 2 veri çerçevesi yanyana birleştirildi ancak veri çerçevelerinde aynı indeks değerleri bulunmadığı için ilgili indeks değerinin krşılığında NaN (Not A Number) değeri atandı. Eğer aşağıdaki gibi bir veri çerçevemiz olsaydı ve bu veri çerçevesini df1 ile yanyana birleştirseydik nasıl bir sonuç elde ederdik dersiniz.

veri3 = {'A': ['A5','A6','A7','A8'],'B': ['B5','B6','B7','B8'],'C': ['C5','C6','C7','C8']}
df3 = pd.DataFrame(veri3, index = [1,6,3,8])
print(df3)
A B C
1 A5 B5 C5
6 A6 B6 C6
3 A7 B7 C7
8 A8 B8 C8
print(pd.concat([df1, df3], axis = 1))
A B C A B C
1 A1 B1 C1 A5 B5 C5
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 A7 B7 C7
4 A4 B4 C4 NaN NaN NaN
6 NaN NaN NaN A6 B6 C6
8 NaN NaN NaN A8 B8 C8

df1 ve df3'te ortak indeks değerleri olduğu için 1. ve 3. satırlar tamamen gerçerli veri ile doldu.

concat fonksiyonu sadece 2 veri çerçevesini birleştirmiyor. 2'den fazla veri çerçevesini de birleştiriyor. Oluşturduğumuz df1, df2 ve df3 veri çerçevelerini altalta ve yanyana birleştirip sonuçları inceleyelim.

print(pd.concat([df1, df2, df3]))
A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
5 A5 B5 C5
6 A6 B6 C6
7 A7 B7 C7
8 A8 B8 C8
1 A5 B5 C5
6 A6 B6 C6
3 A7 B7 C7
8 A8 B8 C8
print(pd.concat([df1, df2, df3], axis = 1))
A B C A B C A B C
1 A1 B1 C1 NaN NaN NaN A5 B5 C5
2 A2 B2 C2 NaN NaN NaN NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN A7 B7 C7
4 A4 B4 C4 NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN A5 B5 C5 NaN NaN NaN
6 NaN NaN NaN A6 B6 C6 A6 B6 C6
7 NaN NaN NaN A7 B7 C7 NaN NaN NaN
8 NaN NaN NaN A8 B8 C8 A8 B8 C8

join() Metodu

join() metodu, Veri çerçevelerini bir birine katmak için kullanılır. Matematikteki Küme konusunu hatırlayın. join() metodu, parametresiz kullanıldığında ortak küme gibi davranarak veri çerçevelerini bir birine dahil eder/katar.

veri4 = {'Ad': ["mustafa", "halil", "emre", "burak"],'yas': [38,42,35,44],'meslek': ["yönetici", "mak.müh.", "yönetici", "akademisyen"]}
df4 = pd.DataFrame(veri4)
print(df4)
Ad yas meslek
0 mustafa 38 yönetici
1 halil 42 mak.müh.
2 emre 35 yönetici
3 burak 44 akademisyen
print(df1.join(df4))
A B C Ad yas meslek
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

Sonuca bakarsanız, df1 veri çerçevesinin temel alındı ve df4'teki indeks değerlerine bakılarak, df1'in indeks değeri olan sütunlarının veri çerçevesine dahil edildiğini, katıldığını görebilirsiniz. Yani ilk veri çerçevesine ilave olarak, iki veri çerçevesinin ortak indeksleri eklenmiş diyebiliriz. İşlemin tersini yaparsak, yani df4'ü temel alarak join metodunu uygularsak ne olur?

print(df4.join(df1))
Ad yas meslek A B C
0 mustafa 38 yönetici NaN NaN NaN
1 halil 42 mak.müh. A1 B1 C1
2 emre 35 yönetici A2 B2 C2
3 burak 44 akademisyen A3 B3 C3

Bu kez de, tahmin ettiğimiz gibi, df4 veri çerçevesi temel alındı, ve df1'in ortak indeks değerleri dahil edildi, df4'ün indeks değeri df1 de olmadığı durumda, ilgili satıra NaN değeri atandı.

how parametresi

join metodunun how parametresi ile, veri çerçevelerinin, sağdaki ya da soldaki veri çerçevesine göre katılma/dahil edilme seçeneğini ayarlayabilir, veri çerçevelerinin birleşimini ya da kesişimini de alabiliriz. Sırayla inceleyelim.

how parametresi, left, right, inner ve outer değerlerini alır. Varsayılan değer left'tir. ( left join )

Aşağıdaki örneği inceleyerek konuyu daha iyi anlayabilirsiniz.

print(df1.join(df4))
A B C Ad yas meslek
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

right join

Aynı kodu, how="right" parametresi ekleyerek te çalıştırıp sonucu görelim.

print(df1.join(df4, how="right"))
A B C Ad yas meslek
0 NaN NaN NaN mustafa 38 yönetici
1 A1 B1 C1 halil 42 mak.müh.
2 A2 B2 C2 emre 35 yönetici
3 A3 B3 C3 burak 44 akademisyen

how parametresi eklenmeyen İlk kodda, indeksler 1'den yani df1 temel alınarak birleştirme işlemi gerçekleştirilirken, how="right" parametresi eklenen ikinci kodda df2 yani sağdaki veri çerçevesi temel alınarak (indeks değerli 0'dan başlayarak) birleştirme işlemi gerçekleşti.

outer join

Matematikteki Birleşik Küme mantığı ile aynıdır. Her iki veri çerçevesini, tüm içeriği ile alıp birbirine katar.

print(df1.join(df4, how="outer"))
A B C Ad yas meslek
0 NaN NaN NaN mustafa 38.0 yönetici
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

Görüldüğü üzre, önce df1 veri çerçevesi alındı, daha sonra df4 veri çerçevesinin içeriği alınarak yanına dahil edildi. Her iki ver içerçevesinde indeks değerleri içermeyen satırlan NaN olarak belirlendi.

inner join

Kesişim kümesi demektir. İki veri çerçevesinde ortak indeks değerlerine sahip satırlar alınır, yanyana birleştirilir.

df1 1'den 4'e kadar olan indeks değerlerine sahipken, df4 0'dan 3'e kadar indeks değerlerine sahip veri çerçeveleridir. Şimdi bu iki veri çerçevesini how=inner parametresi ile birbirine dahil etmek istersen ne olur?

print(df1.join(df4, how="inner"))
A B C Ad yas meslek
1 A1 B1 C1 halil 42 mak.müh.
2 A2 B2 C2 emre 35 yönetici
3 A3 B3 C3 burak 44 akademisyen

İkisinde de ortak olan 1,2 ve 3 nolu indeks değerlerindeki veriler birleştirildi yani her iki veri çerçevesinin kesişimi alındı.

print(df4.join(df1, sort= True))
Ad yas meslek A B C
0 mustafa 38 yönetici NaN NaN NaN
1 halil 42 mak.müh. A1 B1 C1
2 emre 35 yönetici A2 B2 C2
3 burak 44 akademisyen A3 B3 C3

merge() Fonksiyonu

Konu hakkında bilgi yakında eklenecek

← Önceki Bölüm Sonraki Bölüm →