Panda çok büyü boyutlu dataların analizinde kullanılmaktadır. Pandas, numpy paketine göre farklı verilerin bir arada tutulması ve bu veriler içerisinde seçim yapma gibi özellikleri ile daha esnektir. Pandas paketketin de iki tip veri nesnesi bulunamaktadır. Bu veri nesneleri seirler ve veri çerçevlerdir. Bu sepepten pandas’ı iki boyutlu dizilerde diyebiliriz.
Pandas Python kurulumunda yüklü paketler arasında gelmektedir. Eğer sanal bir
Environment oluştumuşsanı kurulum yapmanız gerekmektedir. Pandası pip üzerinden
pip install pandas
komutu ile yükleyebilirsiniz. Kurulum sonrasında
paketin indiğini consola pip list
komutunu yazdığınızda listelenen
pakateler arasında olduğunu göreceksinizdir.
Python Pandas Paketi R veri dilinde olduğu gibi bir çok farklı türde veriyi barındıra bilmektedir. R dilinin en etkin özelliğini taşımaktadır.
1 2 3 4 5 6 7 8 9 10 | webdeveloper@webdev:~$ pip list Package Version --------------- -------- numpy 1.24.2 pandas 1.5.3 pip 22.0.2 python-dateutil 2.8.2 pytz 2022.7.1 setuptools 59.6.0 six 1.16.0 |
Şimdi aşağıda örenek bir pandas serisi oluşuturalım öncelikli olarak python pandas paketini sayfamıza dahil edip pd kisa takma adını veriyoruz. Bu bir gelenektir
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd veri = pd.Series(["Ömer","Lütfi","Mete","Yahya","Kemal"]) print(veri) # Ekran Çıktısı # 0 Ömer # 1 Lütfi # 2 Mete # 3 Yahya # 4 Kemal # dtype: object # <class 'pandas.core.series.series'=""> |
Pandas veri endeksleri 0 ‘dan başlayarak devam ederi. İstersek veri endekslerini aşağıdaki gibi bizlerde belirleyebiliriz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import pandas as pd veri = pd.Series( data=["Ömer","Lütfi","Mete","Yahya","Kemal"], index=["a","b","c","d","e"] ) print(veri) print(type(veri)) # Ekran Çıktısı # a Ömer # b Lütfi # c Mete # d Yahya # e Kemal # dtype: object # <class 'pandas.core.series.series'=""> |
Pandas paketi içerisndeki bir seride belirli endekler arasındaki verileri aşağıdaki gibi alabilmekteyiz
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd veri = pd.Series( data=["Ömer","Lütfi","Mete","Yahya","Kemal"], index=["a","b","c","d","e"] ) print(veri["b":"d"]) # Ekran Çıktısı # b Lütfi # c Mete # d Yahya # dtype: object |
Günlük hayatımızda çoğu veriyi exel veya csv gibi verilerde tutmaktayız. Bazen bu tip dosyadaki verilerin okuması ve istatistik veri oluşuturulması gerekmektedir. Pandas ise bu iş oluşturulmuştur. Bu işlem en çok dataFrame kullanılmaktadır. aşağıda illere göre kişilerin yaş,cinsiyet,boy,il bilgileri verilmektedir. Şimdi bu bilgilerin dataFrame’ini oluşuturalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import pandas as pd data={ "yaş":[22,25,34,44,55,50,15,17,21,32], "cinsiyet":["e","e","k","e","k","k","e","e","k","e"], "boy":[1.76,1.85,1.65,1.70,1.55,1.60,1.77,1.78,1.67,1.80], "il":[40,35,35,40,40,35,35,40,40,35] } veri=pd.DataFrame(data) print(veri) # Ekran Çıktısı # yaş cinsiyet boy il # 0 22 e 1.76 40 # 1 25 e 1.85 35 # 2 34 k 1.65 35 # 3 44 e 1.70 40 # 4 55 k 1.55 40 # 5 50 k 1.60 35 # 6 15 e 1.77 35 # 7 17 e 1.78 40 # 8 21 k 1.67 40 # 9 32 e 1.80 35 |
Tabi bütün veriler bizelere sözlük şeklinde gelmekmektedir. Bazen bu veriler parçalı bir şekilde geliyor. Bizler aşağıdaki gibi verileri ve sutunları zipleyip tekrar dataFrame ile oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import pandas as pd #Her sütun verisini bir değişkene alıyoruz. yas = [22,25,34,44,55,50,15,17,21,32] cinsiyet = ["e","e","k","e","k","k","e","e","k","e"] boy = [1.76,1.85,1.65,1.70,1.55,1.60,1.77,1.78,1.67,1.80] il = [40,35,35,40,40,35,35,40,40,35] #Sütun başlıklarımızı bir değişkene alıyoruz. basliklar = ["Yaş","Cinsiyet","Boy","İl"] #Sütünlarımızı bir list haline getiriyoruz. sutunlar= [yas,cinsiyet,boy,il] #Sütunları ve başlıları zipleyerek bir tuple veri alıyoruz zipliVeri=list(zip(basliklar,sutunlar)) #Var olan tuple veriyi bir sözlük haline getiriyoruz sozlukVeri=dict(zipliVeri) #Sözlüğümüzü ekranda bir görelim print(sozlukVeri) #şimdi ise dataFrame haline getiriyoruz dataVeri=pd.DataFrame(sozlukVeri) #Ekran basıyoruz. print(dataVeri) #Yeni bir sütun olarak yıl'ı ekliyoruz ve varsayılan değer olarak 2023 #değerini atıyoruz dataVeri["Yıl"]=2023 #Sondurum print(dataVeri) # Ekran Çıktısı # { # 'Yaş': [22, 25, 34, 44, 55, 50, 15, 17, 21, 32], # 'Cinsiyet': ['e', 'e', 'k', 'e', 'k', 'k', 'e', 'e', 'k', 'e'], # 'Boy': [1.76, 1.85, 1.65, 1.7, 1.55, 1.6, 1.77, 1.78, 1.67, 1.8], # 'İl': [40, 35, 35, 40, 40, 35, 35, 40, 40, 35] # } # Yaş Cinsiyet Boy İl # 0 22 e 1.76 40 # 1 25 e 1.85 35 # 2 34 k 1.65 35 # 3 44 e 1.70 40 # 4 55 k 1.55 40 # 5 50 k 1.60 35 # 6 15 e 1.77 35 # 7 17 e 1.78 40 # 8 21 k 1.67 40 # 9 32 e 1.80 35 # Yaş Cinsiyet Boy İl Yıl # 0 22 e 1.76 40 2023 # 1 25 e 1.85 35 2023 # 2 34 k 1.65 35 2023 # 3 44 e 1.70 40 2023 # 4 55 k 1.55 40 2023 # 5 50 k 1.60 35 2023 # 6 15 e 1.77 35 2023 # 7 17 e 1.78 40 2023 # 8 21 k 1.67 40 2023 # 9 32 e 1.80 35 2023 |
Tabi bu gibi işlemler sizinde bilgidiniz gibi bir kaç satırdan oluşmuyor. Bu verileri bir exel,csv gibi dosyalardan alıyoruz. Python Pandas Paketinde bu verileri almak içinde dosya okuma işlemi yapmamız gerekiyor. Bir öreneği aşağıda mevcuttur.
Önce kendizimize 100000 satırlık bir istatistik verisi oluturalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import random from os import getcwd,sep print(getcwd()+sep+"boy-istatistik.csv") print( ";".join(["Yaş","Cinsiyet","Boy","İl"]), file=open(getcwd()+sep+"boy-istatistik.csv","a+",encoding="utf-8"), flush=True ) for i in range(100000): print( random.randint(20,70), ["e","k"][random.randint(0,1)], round(random.uniform(1.40,1.88),2), random.randint(1,81), file=open(getcwd()+sep+"boy-istatistik.csv","a+"), flush=True,sep=";") |
şimdi bu dosyadan yazdığımız veriyi okuyalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd from os import getcwd,sep veri = pd.read_csv(getcwd()+sep+"boy-istatistik.csv",delimiter=";") print(type(veri)) print(veri.columns) print(veri) # Ekran Çıktısı # <class 'pandas.core.frame.dataframe'=""> # Index(['Yaş', 'Cinsiyet', 'Boy', 'İl'], dtype='object') # Yaş Cinsiyet Boy İl # 0 66 e 1.49 81 # 1 54 e 1.77 24 # 2 42 e 1.72 14 # 3 47 k 1.73 26 # 4 43 e 1.49 41 # ... ... ... ... .. # 99995 29 k 1.88 34 # 99996 37 k 1.73 69 # 99997 42 k 1.58 6 # 99998 27 k 1.74 62 # 99999 24 k 1.70 70 # [100000 rows x 4 columns] |
Yine Pythonda görmek istediğimiz satır sayısını .head() ile belirleyebirilirz. Aşağıda ilk on satırı getirmenis istedik
1 2 3 4 5 6 7 8 9 10 11 12 13 | print(veri.head(10)) ###Ekran Çıktısı # Yaş Cinsiyet Boy İl # 0 66 e 1.49 81 # 1 54 e 1.77 24 # 2 42 e 1.72 14 # 3 47 k 1.73 26 # 4 43 e 1.49 41 # 5 27 e 1.41 74 # 6 44 k 1.68 68 # 7 46 k 1.65 32 # 8 48 e 1.78 10 # 9 66 k 1.50 72 |
Bir python pandas verisindeki son satırları görmek içinse .tail() methodunu kullanırız.
1 2 3 4 5 6 7 8 | print(veri.tail(5)) ####Ekran Çıktısı # Yaş Cinsiyet Boy İl # 99995 29 k 1.88 34 # 99996 37 k 1.73 69 # 99997 42 k 1.58 6 # 99998 27 k 1.74 62 # 99999 24 k 1.70 70 |
Yine istersek python pandas verinin kaç satır ve sütündan oluşutuğunu .shape metodu ile öğrenebiliriz.
1 2 3 | print(veri.shape) ###Ekran Çıktısı # (100000, 4) |
Pandas veri bloğundaki verilerin sütunlarını, tiplerini ve veri sayılarını .info() metodu ile öğrenebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 | veri.info() # ####Ekran Çıktısı # <class 'pandas.core.frame.dataframe'=""> # RangeIndex: 100000 entries, 0 to 99999 # Data columns (total 4 columns): # # Column Non-Null Count Dtype # --- ------ -------------- ----- # 0 Yaş 100000 non-null int64 # 1 Cinsiyet 100000 non-null object # 2 Boy 100000 non-null float64 # 3 İl 100000 non-null int64 # dtypes: float64(1), int64(2), object(1) # memory usage: 3.1+ MB |
Yine aşağıdaki methodlar pandas verilerinin kullanımında çok iş yaramaktadır.
.copy() : var olan verileri farklı bir değişkene aktarmamızı sağlar.
1 2 | veri2=veri.copy() # veriyi başka bir değişkene kopyaladık print(veri2.head(5)) #Kopyaladığımız değişken üzerinden ilk beştanesini yazdırdık. |
.values ile pandas verilerini bir nampy veri haline getirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 | npVeri=veri.values #pandas verisini nampy bir değer haline getirdik. print(npVeri) ##Ekran Çıktısı [[66 'e' 1.49 81] [54 'e' 1.77 24] [42 'e' 1.72 14] ... [42 'k' 1.58 6] [27 'k' 1.74 62] [24 'k' 1.7 70]] |
Pandas paketi numpy pakati ile de kullanılabilmektedir. Sayısal verilerlerden oluşan bir tabloda, verilerin doğal logaritmasını almak istiyorsak burada numpy paketinde .log() methodu kullanılmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import pandas as pd import numpy as np # numpy paketimizi dahil ettik. from os import getcwd,sep # dosya işlemleri modülümüzü çağırdık. veri = pd.read_csv(getcwd()+sep+"boy-istatistik.csv",delimiter=";") #csv dosyamızı okuduk secim = veri.iloc[0:10,[0,2,3]] #ilk on satır ve 1.,3, ve dördüncü sütunu dahil ettik logVeri=np.log(secim) #ilgili siçim numpy ile logaritmasını aldık. print(logVeri) #Ekrana verimiz bastık. # #Ekran Çıktısı # Yaş Boy İl # 0 4.189655 0.398776 4.394449 # 1 3.988984 0.570980 3.178054 # 2 3.737670 0.542324 2.639057 # 3 3.850148 0.548121 3.258097 # 4 3.761200 0.398776 3.713572 # 5 3.295837 0.343590 4.304065 # 6 3.784190 0.518794 4.219508 # 7 3.828641 0.500775 3.465736 # 8 3.871201 0.576613 2.302585 # 9 4.189655 0.405465 4.276666 |
Pandas veri tipinde ikiden fazla boyutlu verilerde oluşturulabilmektedir bunlara örnek verekcek olursak çift indeksli verileri örnek verebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd indexVeri = [ ("javascript",2022),("javascript",2023), ("php",2022),("php",2023), ("python",2022),("python",2023), ("java",2022),("java",2023) ] kullanimOranlari=[5.7,6.9,9.9,8.9,15.5,20.15,4.4,5.5] veri=pd.Series(data=kullanimOranlari,index=indexVeri) print(veri) #Ekran Çıtısı # (javascript, 2022) 5.70 # (javascript, 2023) 6.90 # (php, 2022) 9.90 # (php, 2023) 8.90 # (python, 2022) 15.50 # (python, 2023) 20.15 # (java, 2022) 4.40 # (java, 2023) 5.50 # dtype: float64 |
Yukarıda yazılım dillerin yıllara göre artış oranlarını verdik. İndekleri tuple veri tipinden oluşturduk ve ekrana baslık. Yine aşağıda belirli indeksler arasındaki verileride istediğimiz gibi basabiliriz.
1 2 3 4 5 6 7 8 9 | print(veri[("javascript",2022):("python",2022)]) # Ekran Çıktısı # (javascript, 2022) 5.7 # (javascript, 2023) 6.9 # (php, 2022) 9.9 # (php, 2023) 8.9 # (python, 2022) 15.5 # dtype: float64 |
Yine çoklu indekslerde mültiindex verisini istediğimiz gibi kullanabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd indexVeri = [ ("javascript",2022),("javascript",2023), ("php",2022),("php",2023), ("python",2022),("python",2023), ("java",2022),("java",2023) ] kullanimOranlari=[5.7,6.9,9.9,8.9,15.5,20.15,4.4,5.5] indexVeri=pd.MultiIndex.from_tuples(indexVeri) dataVeri=pd.Series(data=kullanimOranlari,index=indexVeri) dataVeri.index.names=["Dil","Yıl"] print(dataVeri) # # Ekran Çıktısı # Dil Yıl # javascript 2022 5.70 # 2023 6.90 # php 2022 9.90 # 2023 8.90 # python 2022 15.50 # 2023 20.15 # java 2022 4.40 # 2023 5.50 |
Yine yukarıdaki oluşturduğumuz veri çerçevesini .unstack() metodu ile tersine çevirebiliriz.
1 2 3 4 5 6 7 8 | print(dataVeri.unstack()) # #Ekran Çıktısı # Yıl 2022 2023 # Dil # java 4.4 5.50 # javascript 5.7 6.90 # php 9.9 8.90 # python 15.5 20.15 |
Tersine çevirdiğimiz veri çerçevsini .stack() metodu ile ile eskihaline alabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 | dataVeri=dataVeri.unstack() print(dataVeri.stack()) # Ekran Çıktısı # Dil Yıl # java 2022 4.40 # 2023 5.50 # javascript 2022 5.70 # 2023 6.90 # php 2022 9.90 # 2023 8.90 # python 2022 15.50 # 2023 20.15 |
Multix veri çerçeveleirni istersek farklı veri tiplerinde de oluşturabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd kullanimOranlari=[5.7,6.9,9.9,8.9,15.5,20.15,4.4,5.5] indexVeri=pd.MultiIndex.from_arrays( [["php","php","java","java","javascript","javascript","python","python"], [2022,2023,2022,2023,2022,2023,2022,2023]]) dataVeri=pd.Series(data=kullanimOranlari,index=indexVeri) dataVeri.index.names=["Dil","Yıl"] print(dataVeri) # Ekran Çıktısı # Dil Yıl # php 2022 5.70 # 2023 6.90 # java 2022 9.90 # 2023 8.90 # javascript 2022 15.50 # 2023 20.15 # python 2022 4.40 # 2023 5.50 |
Satırlar için çoklu index oluşturduk. Şimdi ise sütünlar içinde çoklu index oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pandas as pd import numpy as np indeksler=pd.MultiIndex.from_product([["PHP","JAVA","PYTHON"],[2022,2023]]) sutunlar=pd.MultiIndex.from_product([["Dönem 1","Dönem 2"],["Başlangıç","Bitiş"]]) veri=np.array([ "16-Eylül","16 Aralık","1 Şubat","1 Haziran", "18-Eylül","18 Aralık","7 Şubat","7 Haziran", "16-Eylül","16 Aralık","8 Şubat","8 Haziran", "18-Eylül","18 Aralık","7 Şubat","7 Haziran", "16-Eylül","16 Aralık","1 Şubat","1 Haziran", "18-Eylül","18 Aralık","7 Şubat","7 Haziran" ]) veri=veri.reshape(6,4) veri=pd.DataFrame(data=veri,index=indeksler,columns=sutunlar) print(veri) # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # PYTHON 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran |
Yine istersek sütün ismini verekrek sade o süntünü listeleyebiliriz. Sütun adını
belirtirken direk yazarasak bir panda serisipandas.core.series.Series
verirken,
eğer bu ismi bir veri[["Dönem 1"]]
şeklinde verirsek de pandas.core.frame.DataFrame
şeklinde verecektir.
1 2 3 4 5 6 7 8 9 10 | print(type(veri["Dönem 1"])) print(veri["Dönem 1"]) # <class 'pandas.core.frame.dataframe'=""> # Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık # JAVA 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık # PYTHON 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık |
Yine istersek birden fazla oluşan sütünlarda iki adet sütun getirmeyi aşağıdaki gibi iki köşeli parantez içerisinde belirtmemiz gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 | print(type(veri["Dönem 1"])) print(veri[["Dönem 1","Dönem 2"]]) #Ekran Çıktısı # <class 'pandas.core.frame.dataframe'=""> # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # PYTHON 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran |
Yine pandas verisi içerisinde yatayda belirli satırlar arasıdan ki verileri çekmek
istiyorsak. İndeks numaraları ile veri[2:5]
çağırmamız gerekmektedir.
Yine sadece bir sütun içerisinde belirli satır aralıklarını istiyorsak veri["Dönem 1"][2:4]
şeklinde kullanmamız gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 | print(veri[2:4]) print("*"*55) print(veri["Dönem 1"][2:4]) # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # ******************************************************* # Başlangıç Bitiş # JAVA 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık |
Yine pandas veri seçimi yaparken veri.loc["PHP"]
.loc fonksiyonu ile
yatada ve dikeyde verileri seçebilmekteyiz.
1 2 3 4 5 6 7 8 9 10 11 12 | print(veri.loc["PHP"]) print("*"*55) print(veri.loc["PHP"]["Dönem 1"]) # #Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # ******************************************************* # Başlangıç Bitiş # 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık |
Python pandas veri seçiminde veri.loc[]
metodunu kullanarak
yatayda birden çok satır ve bir sütuna ait verileri listelemek istersek aşağıdaki örenteki gibi
birden iki adet köşeli parantez içerisine almamız gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | print(veri.loc[["PHP","JAVA"]]) print("*"*55) print(veri.loc[["PHP","JAVA"]]["Dönem 1"]) # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # ******************************************************* # Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık # JAVA 2022 16-Eylül 16 Aralık # 2023 18-Eylül 18 Aralık |
Python veri seçiminde sütun isimlerini belirterek aşağıdaki gibide bir seçim yapmamız mümkündür.
1 2 3 4 5 6 7 8 9 10 | print(veri.loc[:,["Dönem 1","Dönem 2"]]) # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # PHP 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # PYTHON 2022 16-Eylül 16 Aralık 1 Şubat 1 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran |
Yine python pandas modülünde veriler seçilirken .iloc[]
metodu ile
index numaralarına görede seçim yapılabilmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | print(veri.iloc[1]) # sadece birinci satır ve sütun değerlerini verdi # Ekran Çıtısı # Dönem 1 Başlangıç 18-Eylül # Bitiş 18 Aralık # Dönem 2 Başlangıç 7 Şubat # Bitiş 7 Haziran print(veri.iloc[2:4]) #Satırda 2-4 indeks aralığını verdi. # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran # 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran print(veri.iloc[[1,2]]) #sadece 1. ve 2. satırların satır ve sütun bilgileri ile verdi. # Ekran Çıktısı # Dönem 1 Dönem 2 # Başlangıç Bitiş Başlangıç Bitiş # PHP 2023 18-Eylül 18 Aralık 7 Şubat 7 Haziran # JAVA 2022 16-Eylül 16 Aralık 8 Şubat 8 Haziran print(veri.iloc[[1,2],[1]]) #Yine birinci ve ikinci satırlar, 1. Sütun bilgilerini aldık. # Ekran Çıktısı # Dönem 1 # Bitiş # PHP 2023 18 Aralık # JAVA 2022 16 Aralık |
Python’da veri analizi yapmak için kullandığımız hazır methodlar var bunlar:
.min() | Minimum değer verir. |
.max() | Maximum değeri dönderir. |
.mean() | Ortalamasını alır. |
.count() | Toplam Sayısını Verir |
.unique() | Aynı verilerden bir tanesi getirir.Bir nevi kategorik değerleri bulur. |
.describe() | Verilen sütundaki özet bilgileri verir.(meain,std,m,n,max,25%,50%,75%,max) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") print(veri["Yaş"].min()) #minimum değerini veriyor # 20 print(veri["Yaş"].max()) #en yüksek yaş değeri # 70 print(veri["Yaş"].mean()) # ortalama # 45.04444 print(veri["Yaş"].count()) # toplam veri sayısı # 100000 print(veri["Yaş"].unique()) # aynı verilerden sadece bir tanesini getirir. # [66 54 42 47 43 27 44 46 48 22 38 36 62 24 68 67 49 40 35 23 31 34 29 37 # 63 65 28 53 20 51 60 56 52 30 64 61 70 50 25 32 21 33 57 39 58 69 59 26 # 45 41 55] print(veri["Yaş"].describe()) #degerlerini Verir # count 100000.00000 # mean 45.04018 # std 14.69792 # min 20.00000 # 25% 32.00000 # 50% 45.00000 # 75% 58.00000 # max 70.00000 # Name: Yaş, dtype: float64 |
Yine bunlarındışında sık kullanılan fonksiyonlar:
.mean() | Ortamayı alır. |
.std() | Standart sapmasını hesaplar. |
.median() | Medyanını alır. |
quantile(x) | Yüzdelik dilimini alır (Belirlenen yüzdelik dilimde ortalama değeri dönderir) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") print(veri["Boy"].mean()) #ORTALMA # 1.6398031 print(veri["Boy"].std()) #Standart sapma # 0.13834185778384703 print(veri["Boy"].median()) # 1.64 print(veri["Boy"].quantile(.25)) #%25 ortalama # 1.52 print(veri["Boy"].quantile([0.25,0.50,0.75])) # 0.25,0.50,0.75 ortalamaları # 0.25 1.52 # 0.50 1.64 # 0.75 1.76 print(veri[["Yaş","Boy"]].quantile(0.25)) # Yaş 32.00 # Boy 1.52 print(veri.quantile(.25,axis="rows")) print(veri.quantile(.25,axis="columns")) |
Yine bir sütun için bir şartı belirleyerek uyup uymadığını kontrol edebiliriiz
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart = veri["Cinsiyet"] == "e" print(sart) # Ekran Çıktısı # 0 True # 1 True # 2 True # 3 False # 4 True |
Yine boy verimizde sadece erkeklerin verilerini seçmek istiyorsak aşağıdaki gibi bir şart belirleyip sadece erkek vatandaşlarımızı seçebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart = veri["Cinsiyet"] == "e" bay=veri.loc[sart,:] print(bay) # Ekran Çıktısı # Yaş Cinsiyet Boy İl # 0 66 e 1.49 81 # 1 54 e 1.77 24 # 2 42 e 1.72 14 # 4 43 e 1.49 41 # 5 27 e 1.41 74 |
Seçtiğimiz erkek vatandaşlarımızın verirleri üzerinden yeniden hesaplama yaptırabiliriz. Aşağıda maximum değerlerini almış bulunmaktayız.
1 2 3 4 5 6 7 8 9 10 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart = veri["Cinsiyet"] == "e" bay=veri.loc[sart,:] print(bay.max()) # Ekran Çıktısı # Yaş 70 # Cinsiyet e # Boy 1.88 # İl 81 |
Yine şart işlemimizi aşağıdaki gibide kullanabiliriz.
1 2 3 4 5 6 7 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") print(veri[veri["Cinsiyet"] == "e"].max()) # Yaş 70 # Cinsiyet e # Boy 1.88 # İl 81 |
Yine istersek koşul şartımızı aşağıdaki gibi .contains ilede yapabiliriz.
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart=veri["Cinsiyet"].str.contains("e") print(veri[sart]) # Yaş Cinsiyet Boy İl # 0 66 e 1.49 81 # 1 54 e 1.77 24 # 2 42 e 1.72 14 # 4 43 e 1.49 41 # 5 27 e 1.41 74 # ... ... ... ... .. |
Yine şart işlemlerinde birden fazla şartıda ekleyebiliriz. Mesela Kırşehirli 40 yaş altı bayanları seçelim.
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart= veri[(veri["Cinsiyet"] == "k") & (veri["İl"]==40) & (veri["Yaş"]<40)] print(sart) # Yaş Cinsiyet Boy İl # 417 30 k 1.67 40 # 744 23 k 1.68 40 # 948 36 k 1.70 40 # 1625 38 k 1.87 40 # 2934 34 k 1.70 40 # ... ... ... ... .. |
Yine aşağıdaki örneğimizde hem Kırşehirli veya İzmirli 25 yaş verilerini listeleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") sart= veri[ ((veri["Cinsiyet"] == "k") | (veri["Cinsiyet"] == "e") ) & ((veri["İl"]==40) | (veri["İl"]==6)) & (veri["Yaş"]==25)] print(sart) # Yaş Cinsiyet Boy İl # 4546 25 e 1.67 40 # 5668 25 e 1.84 40 # 7912 25 k 1.69 6 # 8494 25 e 1.47 40 # 13729 25 k 1.71 6 # 16609 25 e 1.55 6 # 16807 25 k 1.68 6 # 17258 25 e 1.84 6 # 18238 25 e 1.59 6 # 21173 25 e 1.67 40 # 21566 25 k 1.41 6 # 23063 25 k 1.41 40 # 25086 25 e 1.55 40 |
Bu seferde 30 yaş 1.80 üzeri verilerimizi listeleyelim
1 2 3 4 5 6 7 8 9 | import pandas as pd veri = pd.read_csv("boy-istatistik.csv",delimiter=";") print(veri.Boy[(veri["Yaş"] == 30) & (veri["Boy"]>1.80)]) # 67 1.84 # 800 1.86 # 1328 1.86 # 1358 1.82 # 1724 1.85 # ... |
Pandas modülünde bir çok fonksiyon bulunmaktadır. Bunlar içerisinde yine çok kullanılan aşağıdaki methodlarıda inceleyelim:
.all() | Veri çerçevsinde sıfır içermeyen değerleri verir. |
.any() | Sıfırdan farklı değerleri görmemizi sağlar. |
.isnull() | NaN değeri içeren sütunları görmemizi sağlar. |
.notnull() | NaN değeri içermeyen verileri görmemizi sağlar. |
Bu methodaları kullanmak için şimdi bir veri çerçevesi oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import pandas as pd import numpy as np d = np.repeat(["s1","s2","s3","s4"],[4,4,4,4],axis=0) #s1,s2,s3,s4 dörder tekrar etmesini istdik v = np.random.random(16) # toplamda 16 satır olduğu için 16 adet randum sayı istedik sozluk= {"deger":d,"veri":v} # dataFrame için sözlük oluşuturp dizi değeleri içine yazdık. data = pd.DataFrame(sozluk) # dataFrame'mi oluşturduk 16 satır 2 sütün print(data) # deger veri # 0 s1 0.740343 # 1 s1 0.624791 # 2 s1 0.038579 # .... data2 = data.pivot(columns="deger",values="veri") #pivot ile deger verilerini sütun haline getirip aşağıdaki çıktıyı alıyoruz. print(data2) # deger s1 s2 s3 s4 # 0 0.770708 NaN NaN NaN # 1 0.981913 NaN NaN NaN # 2 0.623362 NaN NaN NaN # 3 NaN 0.280443 NaN NaN # 4 NaN 0.422603 NaN NaN # 5 NaN 0.737117 NaN NaN # 6 NaN NaN 0.527055 NaN # 7 NaN NaN 0.469131 NaN # 8 NaN NaN 0.711986 NaN # 9 NaN NaN NaN 0.324927 # 10 NaN NaN NaN 0.411963 # 11 NaN NaN NaN 0.064339 print(data2.any()) # sıfrdan farklı değer içeren sütunları görelim # s1 True # s2 True # s3 True # s4 True print(data2.isnull()) # NaN değeri içeren verileri görüyoruz. # deger s1 s2 s3 s4 # 0 False True True True # 1 False True True True # 2 False True True True # 3 False True True True # 4 True False True True # 5 True False True True # 6 True False True True # 7 True False True True print(data2.notnull()) # NaN değeri içermeyen verileri görelim # 0 True False False False # 1 True False False False # 2 True False False False # 3 True False False False # 4 False True False False # 5 False True False False # 6 False True False False # 7 False True False False # 8 False False True False # print(veri["Boy"].mean()) # veri = pd.Series(data=veri,index=indeks,names=sutun) # print(veri) |