Python Pandas Kütüphanesi

Pandas Kütüphanesi de Numpy’a benzer ama daha çok serilerle ve büyük veri analizleri ile adından bahsedilir. Python Pandas Kütüphanesi ile ilgili kaynak dökümantasyon adreslerini paylaşarak yazımıza başlayalım.

Kurulum, Dökümantasyon: https://pandas.pydata.org/
GitHub : https://github.com/pandas-dev/pandas
GitHub Pandas Eğitim: https://github.com/omersahintr/BootCampEdu/tree/main/Pandas
Pandas kütüphanesi Numpy kütüphanesi ile birlikte kullanılır genelde. Bu nedenle import işlemi yaparken her iki kütüphaneyi de çağırırız.
Index
Python Pandas Başlangıç Komutları
Pandas’ta Seriler
Bir sözlük değişkeninden, bir numpy dizisinden veya liste değişkeninden nasıl Pandas Serisi oluşturulur?
İki farklı metodla bu işlemi nasıl yapacağımıza kod satırına geçip bakalım. Protocol isimleri ve bunlara karşılık gelen port numaraları Pandas serisi olarak tanımlanacaktır. Her iki metodun ekran çıktısı açıklama satırları ile verilmiştir.
import pandas as pd
import numpy as np
##Python Pandas Series ##
#Method-1
dictionary = {"http" : 80, "https" : 443, "rdc" : 3389, "smtp" : 25 }
print(pd.Series(dictionary)) # http 80
# https 443
# rdc 3389
# smtp 25
# dtype: int64
#Method-2
ports = [80, 443, 3389, 25]
protocols = ["http", "https", "rdc", "smtp"]
print(pd.Series(index=protocols, data=ports)) # http 80
# https 443
# rdc 3389
# smtp 25
# dtype: objectPythonNumPy Dizisinden Pandas Serisi Oluşturma
Varolan bir NumPy dizisinden Pandas’ta bir seri nasıl oluşturulur?
NumPy dizileri indeks olmadan gösterildiği için Pandas Series formuna dönüştüğünde otomatik olarak 0’da başlayarak indeks ataması yapacaktır. Ekran çıktıları yine açıklama satırı olarak yazılmıştır.
import pandas as pd
import numpy as np
##NumPy Array to Python Pandas Series
n_array = np.arange(20,70,10)
print(pd.Series(n_array)) # 0 20
# 1 30
# 2 40
# 3 50
# 4 60
# dtype: int64PythonBir Liste ve Bir Numpy Dizisini Birleştirip Pandas Serisi Oluşturma
İki farklı veri tipindeki verileri kullanarak Pandas Serisi oluşturalım. Ekran çıktısı kod bloğunda açıklama satırı olarak verilmiştir. Burada dikkat edilmesi gereken önemli nokta, birleştirilecek değişkenlerdeki eleman sayısının eşit olmasıdır.
import pandas as pd
import numpy as np
##NumpyArray and Python List merge to Python Pandas Series:
nArray = np.array([10,20,30,40]) # a NumPy Array
pList = ["Mercedes","BMW", "Tesla","Audi"] # a List
pSeries = pd.Series(index=pList,data=nArray) # Merge to Pandas Series
print(pSeries) # Mercedes 10
# BMW 20
# Tesla 30
# Audi 40
print(pSeries["Tesla"]) # 30PythonPandas Serilerinde Matematiksel İşlemler
Pandas Serilerinde matemetiksel operasyonlar NumPy dizilerine benzer şekilde yapılır. Farklarından biri Pandas’ta indekslerin bulunuyor olmasıdır.
Dilerseniz bir senaryo üzerinden kodlarımızı oluşturalım.
Senaryo: 3 farklı markadaki araçlar hız indekslerine göre 2 farklı yarış yapıyor. Bu iki yarışın toplamına göre en yüksek hız indeksine sahip otomobili hesaplayan python kodlarını yazalım:
import pandas as pd
import numpy as np
## Series Math Operation in Python Pandas:
race1 = pd.Series(data=[220,250,280], index=["Audi","Mercedes", "Tesla"])
race2 = pd.Series(data=[260,230,300], index=["Audi","Mercedes", "Tesla"])
result = race1 + race2
print(result)
print(f"The Winner is {result[result == pd.Series.max(result)]}")
#Results:
Audi 480
Mercedes 480
Tesla 580
dtype: int64
The Winner is Tesla 580PythonNot: Otomobil markaları ve hız indeksleri rastgele seçilmiştir. Gerçeği yansıtmamaktadır.
Farklı İndekslere Sahip Verilerden Oluşan Pandas Serileri Matematiksel İşlemler
Birinci Veri Serisinde London, Tokyo, NewYork şehirlerine ait veriler olsun.
İkinci Veri Serisinde Londra, Tokyo, İstanbul şehirlerine ait veriler olsun.
İki seri de bulunan London ve Tokyo şehirleri için seride toplama işlemi yapılır ancak New York ve Istanbul şehirleri her iki seri de aynı anda bulunmadığı için “NaN” sonucu döndürülür. Sonuçları açıklama satırında görebilirsiniz.
import pandas as pd
import numpy as np
## Pandas Series Operations with Different indexes
serie1 = pd.Series(data=[100,200,300], index=["London","Tokyo","New York"])
serie2 = pd.Series(data=[140,250,410], index=["London","Tokyo","Istanbul"])
operation = serie1 + serie2
print(operation) # Istanbul NaN
# London 240.0
# New York NaN
# Tokyo 450.0
# dtype: float64 Python PandasPythonPandas DataFrame
Series’e göre daha kapsamlı işlemler yapmaya yarayan DataFrame veri tipleri ile nasıl çalışılır?
- veri = np.array([[1,2,3],[0,3,2],[8,9,7],[3,5,8]])
- data_frame = pd.DataFrame(data)
şeklinde bir NumPy dizisi Pandas Data Frame’e dönüştürülüyor.
import pandas as pd
import numpy as np
## Pandas DataFrame:
data = np.array([[1,2,3],[0,3,2],[8,9,7],[3,5,8]])
data_frame = pd.DataFrame(data)
print(data_frame[1][2]) # : 9
print(data_frame) # 0 1 2
# 0 1 2 3
# 1 0 3 2
# 2 8 9 7
# 3 3 5 8PythonKenardaki 0-1-2 column-index ve 0-1-2-3 row-index sayıları oldukça kafa karıştırıcı. Pandas DataFrame nesnesinde bunun için bir çözüm var. İsterseniz satır ve kolonlara dizi (ve hatta Liste) değişkenden atama yaparak isimlendirebilirsiniz. Aşağıda örnekte görebilirsiniz.
Pandas Kütüphanesi ile hazırladığımız örneğimizde Neo, Morpheus, Ajan Smith ve Trinity’nin aylara göre Matrix’e yaptıkları giriş sayıları bir DataFrame nesnesi içinde tutulmaktadır.
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
print(data_frame)
# January February March April
#Neo 1 2 3 2
#Morpheus 1 0 3 2
#Smith 3 8 9 7
#Trinity 3 5 8 9PythonBu oluşturulan yeni DataFrame’den istediğimiz herhangi bir bilgiyi nasıl çekeceğiz. Bu da çok basit.
- data_frame[“March”] ile Mart ayındaki tüm kişilerin giriş sayılarını Pandas Series cinsinden listeleriz.
- (data_frame[“March”]).Neo ile Neo’nun Mart ayındaki giriş sayısını gösterir. Yada;
- data_frame[[“March”][“Neo”]] ile Neo’nun Mart ayındaki giriş sayısını gösterir.
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
print(f"Neo on March {(data_frame["March"]).Neo}") # : Neo on March 3
print(data_frame["March"]["Neo"]) # : 3 --same to up
print(data_frame["April"])
# Neo 2
# Morpheus 2
# Smith 7
# Trinity 9
print((data_frame["April"].mean())) # 5.0Pythonloc() ve iloc() Metodu ile Veri Çekme
- data_frame.loc[“Neo”] ile Neo’nun tüm aylardaki giriş sayıları yazılır.
- data_frame.loc[“Neo”].mean() ile Neo’nun tüm zamanlardaki matrix’e giriş ortalaması hesaplanır.
- data_frame.iloc[0] ile yine Neo’nun (indeksi 0 çünkü) giriş sayıları gelir.
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
print(data_frame)
# January February March April
#Neo 1 2 3 2
#Morpheus 1 0 3 2
#Smith 3 8 9 7
#Trinity 3 5 8 9
print(f"Neo on March {(data_frame["March"]).Neo}") # : Neo on March 3
print(data_frame["March"]["Neo"]) # : 3 --same to up
print(data_frame["April"])
# Neo 2
# Morpheus 2
# Smith 7
# Trinity 9
print((data_frame["April"].mean())) # 5.0
print((data_frame.loc["Neo"])) #: Neo's values by months
# January 1
# February 2
# March 3
# April 2
print((data_frame.loc["Neo"]).mean()) # : 2.0
print((data_frame.iloc[0]).mean()) # : 2.0PythonYeni Bir Veri Seti Ekleme (Mayıs ayı)
Bunun için çok kolay bir yöntem var. Nisan ayının değerlerinin 2 katı olan Mayıs ayını ekleyelim. Pandas Kütüphanesi ile veri setlerinde çok esnek bir çalışma ortamı sağlanır.
- data_frame[“May”] = data_frame[“April”] * 2
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
data_frame["May"] = data_frame["April"] * 2 # : create new month and April x 2
print(data_frame)
# January February March April May
# Neo 1 2 3 2 4
# Morpheus 1 0 3 2 4
# Smith 3 8 9 7 14
# Trinity 3 5 8 9 18
PythonVarolan Bir Satırı Yada Sütunu Çıkarıp Kalan Kısmını Yazdırmak
Örneğin Neo’nun değerlerini yada Şubat değerlerini çıkarıp kalan verileri ekrana yazdırmak için drop() metodunu kullanacağız.
- data_frame.drop(labels=”Neo”, axis=0) satır silmek için
- data_frame.drop(labels=”February”, axis=1) sütun silmek için.
drop() metodundan sonra DataFrame’in asıl verileri değişmez. Sadece ekrana değiştirilmiş hali görüntülenir. Eğer DataFrame nesnesini tekrar çağırırsanız eski hali gelecektir.
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
# drop row operations:
print(data_frame.drop(labels="Neo", axis=0))
# January February March April May
# Morpheus 1 0 3 2 4
# Smith 3 8 9 7 14
# Trinity 3 5 8 9 18
# drop column operations:
print(data_frame.drop(labels="February",axis=1))
# January March April May
# Neo 1 3 2 4
# Morpheus 1 3 2 4
# Smith 3 9 7 14
# Trinity 3 8 9 18PythonBir Python Pandas DataFrame nesnesini drop edip orjinal veri setinin de bu doğrultuda değişmesini istiyorsanız inplace= parametresini True yapmalısınız. Bu parametre default olarak false tanımlandığı için belirtmezseniz orjinal veri setiniz değişmez. Örnekte görelim;
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
# drop column operations changes original data
data_frame.drop(labels="April",axis=1, inplace=True)
print(data_frame)
# January February March May
# Neo 1 2 3 4
# Morpheus 1 0 3 4
# Smith 3 8 9 14
# Trinity 3 5 8 18PythonBüyüktür, Küçüktür, Eşitlik ve Denklik Karşılaştırmaları (>,<, ==, !=,)
Matematiksel olarak büyüktür, küçüktür ve denklik ifadeleri Pandas DataFrame nesnesinde nasıl kullanılır?
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
# match (<> == !=) operations:
print(">2 elements:")
print(data_frame[data_frame>2])
# >2 elements:
# January February March May
# Neo NaN NaN 3 4
# Morpheus NaN NaN 3 4
# Smith 3.0 8.0 9 14
# Trinity 3.0 5.0 8 18
print("<4 elements:")
print(data_frame[data_frame<4])
# <4 elements:
# January February March May
# Neo 1 2.0 3.0 NaN
# Morpheus 1 0.0 3.0 NaN
# Smith 3 NaN NaN NaN
# Trinity 3 NaN NaN NaN
print("=3 elements")
print(data_frame[data_frame==3])
# =3 elements
# January February March May
# Neo NaN NaN 3.0 NaN
# Morpheus NaN NaN 3.0 NaN
# Smith 3.0 NaN NaN NaN
# Trinity 3.0 NaN NaN NaN
print("!=3 elements")
print(data_frame[data_frame!=3])
# !=3 elements
# January February March May
# Neo 1.0 2 NaN 4
# Morpheus 1.0 0 NaN 4
# Smith NaN 8 9.0 14
# Trinity NaN 5 8.0 18PythonBurada koşulu sağlamayan elemanların yerine NaN ifadesi yazacaktır.
İsterseniz burada sadece 1 ay içerisinde veya sadece 1 kişinin verileri içerisinde koşul ifadelerini kullanabilirsiniz. Örnekte görelim:
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
# just on rows or columns matching
print(">4 just in May:")
print(data_frame[data_frame["May"]>4])
# >4 just in May:
# January February March May
# Smith 3 8 9 14
# Trinity 3 5 8 18PythonIndex Sıfırlama (Reset) İşlemi
- data_frame.reset_index()
komutunu kullanarak Data Frame’de indeksleri 0-1-2… şekline çevirebiliriz.
- data_frame.set_index(“kolon_adı”)
şeklinde yazarak istediğiniz kolonu indeks olarak belirleyebilirsiniz. Bu şekilde indeksleri değiştirmiş olmazsınız. Sadece gösterimde geçerli olacaktır. Kalıcı olarak değiştirmek için
- data_frame.set_index(“kolon_adı”, axis=1, inplace=True)
şeklinde yazmalısınız.
Örnekte görelim:
import pandas as pd
import numpy as np
## Pandas DataFrame row-name and column-name define:
data = np.array([[1,2,3,2],[1,0,3,2],[3,8,9,7],[3,5,8,9]])
name_data = ["Neo","Morpheus","Smith","Trinity"]
period_data = ["January","February","March","April"]
data_frame = pd.DataFrame(data, index=name_data, columns=period_data) #column and row name has defined
# set_index() and reset_index() methods:
print("reset_index():")
print(data_frame.reset_index())
# reset_index():
# index January February March May
# 0 Neo 1 2 3 4
# 1 Morpheus 1 0 3 4
# 2 Smith 3 8 9 14
# 3 Trinity 3 5 8 18
print("index --> May columns")
print(data_frame.set_index("May"))
# index --> May columns
# January February March
# May
# 4 1 2 3
# 4 1 0 3
# 14 3 8 9
# 18 3 5 8Pythonİleri Düzey Pandas Operasyonları
Python Pandas Kütüphanesi ile hazırlanmış veri setinde eksik veriler olabilir. Büyük boyuttaki veri setleri ile çalışırken yapacağınız hesaplamalarda bu sizi gerçek sonuçtan uzaklaştıracaktır.
- data_frame.dropna() – na içeren Satırları Kaldır
- data_frame.dropna(axis=1) – na içeren Kolonları Kaldır.
import numpy as np
import pandas as pd
dict = {"Neo":[30,50,np.nan], "Morpheus":[10,np.nan,40], "Trinity":[20,30,40]}
data_frame = pd.DataFrame(dict)
print(data_frame)
# Neo Morpheus Trinity
# 0 30.0 10.0 20
# 1 50.0 NaN 30
# 2 NaN 40.0 40
# dropna() method:
print(data_frame.dropna())
# Neo Morpheus Trinity
# 0 30.0 10.0 20
print(data_frame.dropna(axis=1))
# Trinity
# 0 20
# 1 30
# 2 40PythonÖrnekte görüldüğü gibi “na” ve “NaN” içeren satırlar yada kolonlar tamamen kaldırılarak gösterildi.
Daha Fazla NaN İçeren Veri Setlerinde drop() Kullanımı
- new_data_frame.dropna(axis=1, thresh=2)
satırı ile 2’den fazla NaN içeren sütunlar drop edilir. Buradaki thresh değeri, bir set içerisindeki geçerli veri sayısını belirler. 2 verildiğinde Neo, Morpheus, Trinity ve Smith’in verilerinde 2 tane normal veri olduğunu belirler.
import numpy as np
import pandas as pd
# with more NoN counts data
new_dict = {"Neo":[30,50,np.nan], "Morpheus":[10,np.nan,40], "Trinity":[20,30,40], "Smith":[15,np.nan,np.nan]}
new_data_frame = pd.DataFrame(new_dict)
print(new_data_frame.dropna(axis=1, thresh=2)) # 2 and more NaN's has dropped. Smith's data removed.
# Neo Morpheus Trinity
# 0 30.0 10.0 20
# 1 50.0 NaN 30
# 2 NaN 40.0 40
print(new_data_frame.dropna(axis=1, thresh=1))
# Neo Morpheus Trinity Smith
# 0 30.0 10.0 20 15.0
# 1 50.0 NaN 30 NaN
# 2 NaN 40.0 40 NaNPythonEksik Veriyi (NaN) Başka Bir Veri İle Doldurma
NaN değerlerin yerine farklı değerler ile doldur.
- new_data_frame.fillna(20) – na değerlerin yerine 20 yaz.
import numpy as np
import pandas as pd
new_dict = {"Neo":[30,50,np.nan], "Morpheus":[10,np.nan,40], "Trinity":[20,30,40], "Smith":[15,np.nan,np.nan]}
new_data_frame = pd.DataFrame(new_dict)
# fillna() methods:
print(new_data_frame.fillna(20))
# Neo Morpheus Trinity Smith
# 0 30.0 10.0 20 15.0
# 1 50.0 20.0 30 20.0
# 2 20.0 40.0 40 20.0PythonPandas Veri Gruplama
Pandas Kütüphanesi içerisinde bulunan sık kullanılacak bir metoddur. Aynı türden olan verileri gruplamak için kullanılır. Daha sonra bu veriler içerisinde Pandas operasyonları yapabilirsiniz(max,min, count vs.).
- sales_data_frames.groupby(“Kolon Adı”) sonuç olarak bellek adresi döndürür. Nerdeyse tüm Pandas işlemlerini sonuna nokta koyarak çalıştırabilirsiniz.
- sales_data_frames.groupby(“Kolon Adı”).count()
- sales_data_frames.groupby(“Kolon Adı”).mean(“numerik kolon adı”)
- sales_data_frames.groupby(“Kolon Adı”).mean(numeric_only=True) ile sadece nümerik kolonların ortalamalarını alır.
- sales_data_frames.groupby(“Kolon Adı”).describe() ile özet istatistik alınabilir.
- sales_data_frames.groupby(“Kolon Adı”).describe().transpose() ile satır ve sütunların yerini değiştirerek daha anlaşılır bir görünüm sunabilirsiniz.
Aşağıda örnek kod ve ekran çıktılarını inceleyebilirsiniz.
import numpy as np
import pandas as pd
# Group Data
sales_data = {"Code":["C++","PHP","Python","PHP","C++","PHP"],"Names":["Neo","Morpheus","Trinity","Smith","Adam","Joe"], "Money":[250,120,200,350,300,100]}
sales_data_frame = pd.DataFrame(sales_data)
print(sales_data_frame)
# Code Names Money
# 0 C++ Neo 250
# 1 PHP Morpheus 120
# 2 Python Trinity 200
# 3 PHP Smith 350
# 4 C++ Adam 300
# 5 PHP Joe 100
groups = sales_data_frame.groupby("Code")
print(groups.count())
# Names Money
# Code
# C++ 2 2
# PHP 3 3
# Python 1 1
print(groups.mean("Money"))
# Money
# Code
# C++ 275.0
# PHP 190.0
# Python 200.0
print(groups.min("Money"))
# Money
# Code
# C++ 250
# PHP 100
# Python 200
print(groups.max(numeric_only=True))
# Money
# Code
# C++ 300
# PHP 350
# Python 200
print(groups.describe())
# Money
# count mean std min 25% 50% 75% max
# Code
# C++ 2.0 275.0 35.355339 250.0 262.5 275.0 287.5 300.0
# PHP 3.0 190.0 138.924440 100.0 110.0 120.0 235.0 350.0
# Python 1.0 200.0 NaN 200.0 200.0 200.0 200.0 200.0
print(groups.describe().transpose())
# Code C++ PHP Python
# Money count 2.000000 3.00000 1.0
# mean 275.000000 190.00000 200.0
# std 35.355339 138.92444 NaN
# min 250.000000 100.00000 200.0
# 25% 262.500000 110.00000 200.0
# 50% 275.000000 120.00000 200.0
# 75% 287.500000 235.00000 200.0
# max 300.000000 350.00000 200.0PythonData Frame Birleştirme İşlemi – concat()
Birden fazla sayıdaki Pandas Data Frame nesnesini tek Data Frame altında birleştirmek için concat() metodu kullanılır.
- concat([new_data_frame1,new_data_frame2,new_data_frame3],ignore_index=True) ifadesi ile 3 adet data frame birleştirildi ve son parametre olan ignore_index=True ile indeks numaraları da yeniden belirlendi.
import pandas as pd
import numpy as np
new_dict1 = {"Name":["John","Alice","Bob","Doe","Smith"],
"Sports":["Football","Basketball","Cricket","Tennis","Baseball"],
"Calori":[230,240,220,250,260]
}
new_dict2 = {"Name":["Jack","Adam","Brain","Doh","Sarah"],
"Sports":["Football","Basketball","Cricket","Tennis","Baseball"],
"Calori":[130,140,120,150,160]
}
new_dict3 = {"Name":["Homer","Jason","Track","Dora","Fiona"],
"Sports":["Football","Basketball","Cricket","Tennis","Baseball"],
"Calori":[330,340,320,350,360]
}
new_data_frame1 = pd.DataFrame(new_dict1)
new_data_frame2 = pd.DataFrame(new_dict2)
new_data_frame3 = pd.DataFrame(new_dict3)
#Concatenation of DataFrames
new_data_frame = pd.concat([new_data_frame1,new_data_frame2,new_data_frame3],ignore_index=True)
"""##### Name Sports Calori
0 John Football 230
1 Alice Basketball 240
2 Bob Cricket 220
3 Doe Tennis 250
4 Smith Baseball 260
5 Jack Football 130
6 Adam Basketball 140
7 Brain Cricket 120
8 Doh Tennis 150
9 Sarah Baseball 160
10 Homer Football 330
11 Jason Basketball 340
12 Track Cricket 320
13 Dora Tennis 350
14 Fiona Baseball 360
#####"""
print(new_data_frame)PythonMerge Metodu ile Birleştirme
Ortak verilere göre birleştirme yaparak daha kullanışlı bir gösterim sunar. Örnek üzerinde daha anlaşılır olacaktır:
Sports kolonu bizim kesişim kümemiz olacaktır. Yani birden fazla kişi aynı sporu yapıyor. Bunu duyarlı bir şekilde gösterimini sağlamak için parametreyi on=”Sports” olarak belirledik.
import pandas as pd
import numpy as np
new_dict1 = {"Name":["John","Alice","Bob","Doe","Smith"],
"Sports":["Football","Basketball","Cricket","Tennis","Baseball"],
"Calori":[230,240,220,250,260]
}
new_dict2 = {"Name":["Jack","Adam","Brain","Doh","Sarah"],
"Sports":["Football","Basketball","Cricket","Tennis","Baseball"],
"Calori":[130,140,120,150,160]
}
new_data_frame1 = pd.DataFrame(new_dict1)
new_data_frame2 = pd.DataFrame(new_dict2)
#Merging of DataFrames
merge_data_frame = pd.merge(new_data_frame1,new_data_frame2,on="Sports")
print(merge_data_frame)
"""#### Name_x Sports Calori_x Name_y Calori_y
0 John Football 230 Jack 130
1 Alice Basketball 240 Adam 140
2 Bob Cricket 220 Brain 120
3 Doe Tennis 250 Doh 150
4 Smith Baseball 260 Sarah 160
#####"""
PythonUnique() ve Nunique() Metodları ile Benzersiz Verileri Çekme
Örneğin bir üniversitedeki öğrencilerin özlük listesi var. Listedeki kolonlarda ad-soyad ve bölüm adı yazıyor. Burada onbinlerce verinin içinden tüm bölümlerin listesini çekmek için Pandas Kütüphanesi içinde bulunan unique metodu kullanılır. nunique ise farklı verilerin toplam sayısını verir.
import pandas as pd
import numpy as np
#unique values in the DataFrame
new_sales_dict = {"Name":["John","Alice","Bob","Doe","Smith"],
"Sales":[230,240,220,250,260],
"Profit":[30,40,20,50,60]}
new_sales_frame = pd.DataFrame(new_sales_dict)
print(new_sales_frame)
"""#### Name Sales Profit
0 John 230 30
1 Alice 240 40
2 Bob 220 20
3 Doe 250 50
4 Smith 260 60
#####"""
print(new_sales_frame["Name"].unique())
# ['John' 'Alice' 'Bob' 'Doe' 'Smith']
print(new_sales_frame["Name"].nunique())
# 5PythonÖzel Bir Fonksiyonu Data Frame Verilerine Uygulama
Python Pandas içindeki bir fonksiyonu veya kendi tanımladığınız bir fonksiyonu Data Frame verilerine uygulamak için apply metodunu kullanacağız. Bunun için bir KDV (VAT) hesabı yapan fonksiyon tanımlayalım ve Data Frame elemanlarına uygulayalım.
import pandas as pd
import numpy as np
#unique values in the DataFrame
new_sales_dict = {"Name":["John","Alice","Bob","Doe","Smith"],
"Sales":[230,240,220,250,260],
"Profit":[30,40,20,50,60]}
new_sales_frame = pd.DataFrame(new_sales_dict)
#VAT Calculation in DataFrame
def vat_calc(sales):
return sales*0.18
print(new_sales_frame["Sales"].apply(vat_calc))
"""#### 0 41.4
1 43.2
2 39.6
3 45.0
4 46.8
Name: Sales, dtype: float64
#####"""PythonPandas ile Excel Dosya İşlemleri
Python Pandas Kütüphanesi ile Excel tablosu okuma, yazma gibi işlemleri yaparak Excel verilerini işleyebiliriz. Son derece basit bir kod yapısı bulunuyor.
- data_frame = pd.read_excel(“Dosya.xlsx”)
Geri kalan tüm işlemler Data Frame nesnesi ile bire bir aynı ilerleyecektir. Excel tablosunu sağlıklı bir şekilde Data Frame nesnesine aktarmak için openpyxl adlı kütüphaneyi de import etmeyi unutmayınız.
import pandas as pd
import numpy as np
import openpyxl
data_frame = pd.read_excel("sales.xlsx")
print(data_frame)
# 1) How many rows of data are there in total?
count_rows = data_frame["Employee Name"].count()
print(f"Total Rows Count: {count_rows}")
# Total Rows Count: 100
# 2) What is the average salary this company pays?
averaje_salary = data_frame["Salary"].mean()
print(f"Average Salary: {averaje_salary:.2f}")
# Average Salary: 725.84
# 3) How does the average salary compare across departments at this company?
averaje_salary_of_department = data_frame.groupby("Department")["Salary"].mean()
print(f"Average Salary of Department: \n{averaje_salary_of_department.round(2)}")
""" Average Salary of Department:
Department
Finance 805.41
HR 640.94
Marketing 707.00
Sales 656.67
Software Development 826.41
Name: Salary, dtype: float64
"""
# 4) How does the average salary compare by title (senior - junior) at this company?
averaje_salary_of_title = data_frame.groupby("Title")["Salary"].mean()
print(f"Average Salary of Title: \n{averaje_salary_of_title.round(2)}")
""" Average Salary of Title:
Title
C-level 1058.33
Junior 440.62
Mid 641.45
Mid-Senior 725.50
Senior 867.78
Name: Salary, dtype: float64
"""
#5) On average, how many percent more salary does a senior person earn than a junior person?
match_avg = data_frame.groupby("Title")["Salary"].mean()
senior_avg = match_avg["Senior"].round(2)
junior_avg = match_avg["Junior"].round(2)
percent_avg = (((senior_avg - junior_avg)/senior_avg)*100).round(2)
print(f"mean differences= {senior_avg} % {junior_avg} = {percent_avg}")
""" 867.78 % 440.62 = 49.22
"""
# 6) How much more, on average, is the salary of a senior person
# in the software development department compared to a junior person?
salaries_developers = data_frame.groupby("Department")["Salary"].mean()
salaries_juniors = data_frame.groupby("Title")["Salary"].mean()
salary_minus = (salaries_developers["Software Development"] - salaries_juniors["Junior"]).round(2)
print(f"Developers - Juniors= {salary_minus}")
""" Developers - Juniors= 385.78
"""
#7) How much more salary does a c-level person in the finance department earn on average
# compared to a mid-senior person?
salary_finance = data_frame.loc[data_frame["Department"] == "Finance"].groupby("Title")["Salary"].mean()
print(f"Result(7) = {salary_finance["C-level"]-salary_finance["Mid-Senior"]}")
""" Result(7) = 240.0
"""
#8) How many times more c-level employees are there in the
# software development department than in the marketing department?
developer_count = (data_frame.loc[data_frame["Department"] == "Software Development"]).groupby("Title")["Salary"].count()
marketing_count = (data_frame.loc[data_frame["Department"] == "Marketing"]).groupby("Department")["Salary"].count()
print(f"Result(8) = {developer_count["C-level"] + marketing_count["Marketing"]}")
""" Result(8) = 24
"""Python



![Google Mobil Uyumlu Siteleri Ön Plana Çıkaracak [Güncel]](https://www.omersahin.com.tr/wp-content/uploads/2015/04/google-mobil-uyumlu-siteler.jpg)


