Python Pandas Kütüphanesi

31.01.2025
100
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.

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: object
Python

NumPy 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: int64
Python

Bir 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"]) # 30
Python

Pandas 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    580
Python

Not: 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 Pandas
Python

Pandas 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  8
Python

Kenardaki 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      9
Python

Bu 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.0
Python

loc() 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.0
Python

Yeni 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

Python

Varolan 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   18
Python

Bir 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   18
Python

Bü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   18
Python

Burada 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   18
Python

Index 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      8
Python

İ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       40
Python

Ö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    NaN
Python

Eksik 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.0
Python

Pandas 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.0
Python

Data 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)
Python

Merge 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
#####"""
Python

Unique() 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())
# 5
Python

Ö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
#####"""
Python

Pandas 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

ZİYARETÇİ YORUMLARI - 0 YORUM

Henüz yorum yapılmamış.

Bu web sitesi, bilgisayarınıza bilgi depolamak amacıyla bazı tanımlama bilgilerini kullanabilir.
Bu bilgilerin bir kısmı sitenin çalışmasında esas rolü üstlenirken bir kısmı ise kullanıcı deneyimlerinin iyileştirilmesine ve geliştirilmesine yardımcı olur.
Sitemize ilk girişinizde vermiş olduğunuz çerez onayı ile bu tanımlama bilgilerinin yerleştirilmesine izin vermiş olursunuz.
Çerez bilgilerinizi güncellemek için ekranın sol alt köşesinde bulunan mavi kurabiye logosuna tıklamanız yeterli. Kişisel Verilerin Korunması,
Gizlilik Politikası ve Çerez (Cookie) Kullanımı İlkeleri hakkında detaylı bilgi için KVKK&GDPR sayfamızı inceleyiniz.
| omersahin.com.tr |
Copyright | 2007-2025