Pandas Nedir? Python Pandas Kütüphanesinin Kullanımı

Can Yüksel

Erdoğancan Yüksel

13 dakika 18 saniye okuma süresi

Pandas, Python programlama dilinde veri işleme ve veri analizi için kullanılan güçlü bir kütüphanedir. Pandas DataFrame yapısı sayesinde Python'da veri temizleme, filtreleme, gruplama ve veri manipülasyonu gibi işlemler verimli bir şekilde yapılabilmektedir.

pandas-nedir

Pandas Nedir?

Pandas, veri analizi ve veri işleme için yaygın olarak kullanılan verimli bir Python kütüphanesidir. Pandas (Panel Data) çok boyutlu veri yapılarını işlemek ve verilerin manipülasyonu için kullanılmaktadır. Pandas'da temel olarak Series ve DataFrame olarak adlandırılan iki ana veri yapısı bulunmaktadır. İlgili veri yapıları kullanılarak verilerin analizleri daha basit ve hızlı yapılabilmektedir. Bu özelliklerinden dolayı Pandas önemli bir Python kütüphanesidir.

Pandas'da dtypes olarak adlandırılan veri türleri şu şekilde sıralanabilir:

  • int64: Tamsayılar için kullanılır.
  • float64: Ondalıklı sayılar için kullanılır.
  • bool: True veya False değeri alır.
  • object: Nesne türüdür ve karışık veri tipleri için kullanılır.
  • category: Kategorik veri türüdür. Belirli metin değerleri içeren sınırlı listeler için kullanılır. İlgili değerler hafızada daha verimli bir şekilde saklanır.
  • datetime64: Tarih ve saat değerleri için kullanılır.
  • timedelta64[ns]: İki tarih veya saat arasındaki süreyi temsil etmek için kullanılır.
  • string: Metin veri türüdür.

Kod örneği:

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [50000.0, 60000.5, 70000.3],
    'Is_Manager': [True, False, False],
    'Start_Date': ['2020-01-15', '2019-06-01', '2018-03-20'],
    'Title': ['Manager', 'Assistant', 'Intern']
}

# DataFrame'in oluşturulması ve veri türlerinin ayarlanması
df = pd.DataFrame(data)
df['Start_Date'] = pd.to_datetime(df['Start_Date'])  # Start_Date sütununun datetime64[ns] türüne dönüştürülmesi
df['Title'] = df['Title'].astype('category')  # Title sütununun category veri türüne dönüştürülmesi

# Output:
print(df.dtypes)
# Output:
 Name                  object
 Age                    int64
 Salary               float64
 Is_Manager              bool
 Start_Date    datetime64[ns]
 Title               category

Pandas Kurulumu

Komut sistemini açtıktan sonra ve aşağıdaki kodu komut satırına yazıyoruz. Kurulumun sağlanması için bilgisayarda Python'ın yüklü olması gerekmektedir.

pip install pandas

Eğer bilgisayarda Anaconda yüklü ise ve Pandas kütüphanesi burada kullanılmak isteniyor ise aşağıdaki komut Anaconda Prompt üzerinden çalıştırılmalıdır.

conda install pandas

Pandas Kütüphanesinin Tanımlanması

Pandas kütüphanesi Python projelerinde aşağıdaki şekilde tanımlanabilmektedir:

import pandas

Diğer bir tanımlama şekli de en yaygın şekilde kullanılan pd takma adı ile tanımlanmasıdır:

import pandas as pd

Pandas Series

Python'daki listelerle veya NumPy dizilerine benzer işlev sağlamaktadır. Series, veri ve indeks olmak üzere iki bileşenden oluşmaktadır. Veriler int, string, boolean, datetime veya object gibi veri türlerinden oluşmaktadır. Indeks ise bu verilere referans vermek için kullanılmaktadır.

Pandas Series oluşturmak için Series() fonksiyonu kullanılmaktadır. Pandas Series, veri analizi ve işleme işlemlerinde yaygın olarak kullanılmaktadır ve güçlü bir araçtır.

Kod örneği:

import pandas as pd
dictionaryDatExample = {'User-1': ['Active', '2024-01-15'], 'User-2': ['Passive', '2020-01-15']}
pd.Series(dictionaryDatExample)
# Output:
User-1    [Active, 2024-01-15]
User-2   [Passive, 2020-01-15]
dtype: object

dataList = [10, 20, 30, 40, 50]
pd.Series(dataList)
# Index belirtilmeyen durumda otomatik olarak her bir veriye index ataması yapılır.
# Output:
0    10
1    20
2    30
3    40
4    50
dtype: int64

# Özelleştirilmiş index ataması yapmak için index = parametresi kullanılır.
pd.Series(dataList, index= ['Ahmet', 'Mehmet', 'Can', 'Barış', 'Haktan'])
# Output:
Ahmet     10
Mehmet    20
Can       30
Barış     40
Haktan    50
dtype: int64

# Serilerde matematiksel işlemler

data1 = pd.Series([20, 30, 40, 50], index=['a', 'b', 'c', 'd'])
data2 = pd.Series([10, 5, 3, 1], index=['a', 'c', 'f', 'g'])
data1 + 2
# Output:
a    22
b    32
c    42
d    52
dtype: int64

# Eksik veriler için ilgili değer NaN olarak atanır.
data1 + data2
# Output:
a    30.0
b     NaN
c    45.0
d     NaN
f     NaN
g     NaN
dtype: float64

Pandas DataFrame

Pandas DataFrame, Pandas kütüphanesinde veri tablolarını temsil etmektedir. Çok sayıda satır ve sütunlardan oluşan iki boyutlu bir veri yapısıdır. DataFrame'ler farklı veri tiplerini içerebilmektedir ve her bir veri bir satır ve sütun indeksi ile ilişkilendirilmektedir.

DataFrame'ler üzerinde veri manipülasyonu, verilerin analizi ve veriler üzerinde işlemler yapmak oldukça kolay hale gelmektedir.

Kod örneği:

import pandas as pd
import numpy as np

data = np.random.randn(4,3)
data
# NumPy yardımı ile 4 satır ve 3 kolondan oluşan bir data oluşturuldu.
# Output:
array([[-0.13941637, -0.50907718, -1.67464985],
       [ 0.94756765,  1.03262129, -0.62721243],
       [ 0.51653947,  0.31042099, -0.02915932],
       [-0.9138679 , -0.51386815, -0.92682456]])

# DataFrame oluşturmak için pd.DataFrame fonksiyonu kullanılmaktadır. (Index ve kolonlar otomatik oluşturuldu.)
dataFrame = pd.DataFrame(data)

dataFrame
# Output:
          0         1         2
0 -0.139416 -0.509077 -1.674650
1  0.947568  1.032621 -0.627212
2  0.516539  0.310421 -0.029159
3 -0.913868 -0.513868 -0.926825

# Belirli bir kolon ve satırdan data'yı kullanmak için
dataFrame[0][3] # 0 -> kolon, 3 -> satır
# Output:
np.float64(-0.9138679020426379)

# Index ve kolonların belirlendiği durumda DataFrame oluşturma
dataFrame2 = pd.DataFrame(data, index=['Can', 'Emre', 'Barış', 'Haktan'], columns=['Maas', 'Yas', 'Calisma Saati'])

dataFrame2
# Output:
            Maas       Yas  Calisma Saati
Can    -0.139416 -0.509077      -1.674650
Emre    0.947568  1.032621      -0.627212
Barış   0.516539  0.310421      -0.029159
Haktan -0.913868 -0.513868      -0.926825

Pandas DataFrame'lerde satır ve sütunlarda işlemler için kod örnekleri:

import pandas as pd
import numpy as np

data = np.random.randn(4,3)

#index ve kolonların belirlendiği durumda DataFrame oluşturma
df = pd.DataFrame(data, index = ['Can', 'Emre', 'Barış', 'Haktan'], columns = ['Maas', 'Yas', 'Calisma Saati'])

df
# Output:
            Maas       Yas  Calisma Saati
Can    -0.139416 -0.509077      -1.674650
Emre    0.947568  1.032621      -0.627212
Barış   0.516539  0.310421      -0.029159
Haktan -0.913868 -0.513868      -0.926825

# Kolon bilgisi için
dataFrame2['Yas']
# Output:
Can      -0.509077
Emre      1.032621
Barış     0.310421
Haktan   -0.513868
Name: Yas, dtype: float64

# Satır bilgisi için .loc kullanılmaktadır.
dataFrame2.loc['Can']
# Output:
Maas            -0.139416
Yas             -0.509077
Calisma Saati   -1.674650
Name: Can, dtype: float64

# DataFrame'e yeni kolon eklenmesi
df['Mesai Saati'] = [6,6,8,8]
df
# Output:
            Maas       Yas  Calisma Saati  Mesai Saati
Can    -0.139416 -0.509077      -1.674650            6
Emre    0.947568  1.032621      -0.627212            6
Barış   0.516539  0.310421      -0.029159            8
Haktan -0.913868 -0.513868      -0.926825            8

# Satır silmek için drop fonksiyonu kullanılır.
df.drop('Can')
# Output:
            Maas       Yas  Calisma Saati  Mesai Saati
Emre    0.947568  1.032621      -0.627212            6
Barış   0.516539  0.310421      -0.029159            8
Haktan -0.913868 -0.513868      -0.926825            8

# Sütun silmek için drop fonksiyonu axis=1 belirtilerek kullanılır.
df.drop('Mesai Saati', axis=1)
# Output:
            Maas       Yas  Calisma Saati
Can    -0.139416 -0.509077      -1.674650
Emre    0.947568  1.032621      -0.627212
Barış   0.516539  0.310421      -0.029159
Haktan -0.913868 -0.513868      -0.926825

# inplace=True yapılmadığı durumda orijinal DataFrame'den eleman kalıcı olarak silinmez. Kalıcı silmek için True yapılmaktadır.
df.drop('Mesai Saati', axis=1, inplace=True)
df
# Output:
            Maas       Yas  Calisma Saati
Can    -0.139416 -0.509077      -1.674650
Emre    0.947568  1.032621      -0.627212
Barış   0.516539  0.310421      -0.029159
Haktan -0.913868 -0.513868      -0.926825

# Şartlı DataFrame gösteriminde şartı sağlamayan değerler NaN olarak dönmektedir.
df[df < 0]
# Output:
            Maas       Yas  Calisma Saati
Can    -0.139416 -0.509077      -1.674650
Emre         NaN       NaN      -0.627212
Barış        NaN       NaN      -0.029159
Haktan -0.913868 -0.513868      -0.926825

# Index kolonunu güncellemek için set_index() fonksiyonu kullanılır.
df['Yeni Index'] = ['C','E','B','H']
df
# Output:
            Maas       Yas  Calisma Saati Yeni Index
Can    -0.139416 -0.509077      -1.674650          C
Emre    0.947568  1.032621      -0.627212          E
Barış   0.516539  0.310421      -0.029159          B
Haktan -0.913868 -0.513868      -0.926825          H

df.set_index('Yeni Index')
# Output:
                Maas       Yas  Calisma Saati
Yeni Index                                   
C          -0.139416 -0.509077      -1.674650
E           0.947568  1.032621      -0.627212
B           0.516539  0.310421      -0.029159
H          -0.913868 -0.513868      -0.926825

# Index'i resetlemek için reset_index() fonksiyonu kullanılır.
df.reset_index()
# Output:
     index      Maas       Yas  Calisma Saati
 0     Can -0.139416 -0.509077      -1.674650
 1    Emre  0.947568  1.032621      -0.627212
 2   Barış  0.516539  0.310421      -0.029159
 3  Haktan -0.913868 -0.513868      -0.926825

Pandas MultiIndex

MultiIndex çok boyutlu veriler ile çalışmak ve ilgili verilerin manipülasyonu için yaygın olarak kullanılmaktadır. MultiIndex, bir DataFrame veya Series'in çok boyutlu olarak indekslenmesini ifade etmektedir. MultiIndex kod örneği:

import pandas as pd
import numpy as np
arrays = [["fruit","fruit","fruit","vegetable","vegetable","vegetable"],["apple","orange","banana","cabbage","carrot","bean"]]
# Output:
[['fruit', 'fruit', 'fruit', 'vegetable', 'vegetable', 'vegetable'], ['apple', 'orange', 'banana', 'cabbage', 'carrot', 'bean']]
tuples = list(zip(*arrays)) # İlgili array'lerin birleştirilmesi
# Output:
[('fruit', 'apple'), ('fruit', 'orange'), ('fruit', 'banana'), ('vegetable', 'cabbage'), ('vegetable', 'carrot'), ('vegetable', 'bean')]
index = pd.MultiIndex.from_tuples(tuples, names = ["first","second"]) # names -> Kolonlara verilen isimlerdir.
# Output:
MultiIndex([(    'fruit',   'apple'),
            (    'fruit',  'orange'),
            (    'fruit',  'banana'),
            ('vegetable', 'cabbage'),
            ('vegetable',  'carrot'),
            ('vegetable',    'bean')],
           names=['first', 'second'])
dataFrame = pd.DataFrame(np.random.randint(1,18,6), index = index, columns = ["Adet"])
# Output:
                   Adet
first     second       
fruit     apple      12
          orange     12
          banana     16
vegetable cabbage     3
          carrot      6
          bean       14

Pandas dropna() ve fillna() Fonksiyonları

dropna() fonksiyonu DataFrame veya Series'lerde eksik verileri(NaN değerler) kaldırmak için kullanılır. axis = 0 eksik veri bulunan satırları kaldırmak için kullanılırken, axis = 1 eksik veri bulunan sütunları kaldırmak için kullanılır. how = 'any' en az bir adet NaN içeren veriler kaldırılır. how = 'all' ise tüm değerleri NaN olan veriler kaldırılır.

fillna() fonksiyonu eksik verileri belirlenen bir değer doğrultusunda doldurmak için kullanılmaktadır.

dropna() ve fillna() fonksiyonlarının kullanımları ile ilgili kod örneği:

import pandas as pd
import numpy as np
dicData = {"Istanbul": [30,26,28,np.nan], "Ankara": [24, np.nan, 27,29], "Izmir": [40,38,np.nan,41],"Bursa":[30,28,26,26]}
dicData
Output:
{'Istanbul': [30, 26, 28, nan], 'Ankara': [24, nan, 27, 29], 'Izmir': [40, 38, nan, 41], 'Bursa': [30, 28, 26, 26]}

#Data'ların DataFrame'e dönüştürülmesi
df = pd.DataFrame(dicData)
df
Output:
   Istanbul  Ankara  Izmir  Bursa
0      30.0    24.0   40.0     30
1      26.0     NaN   38.0     28
2      28.0    27.0    NaN     26
3       NaN    29.0   41.0     26

days = ["Pazartesi","Sali","Carsamba","Persembe"]
df["Gunler"] = days
df.set_index("Gunler")
Output:
           Istanbul  Ankara  Izmir  Bursa
Gunler                                   
Pazartesi      30.0    24.0   40.0     30
Sali           26.0     NaN   38.0     28
Carsamba       28.0    27.0    NaN     26
Persembe        NaN    29.0   41.0     26

#NaN değer bulunan satırlar silinir.
df.dropna()
Output:
   Istanbul  Ankara  Izmir  Bursa     Gunler
0      30.0    24.0   40.0     30  Pazartesi

#axis = 1 yapıldığında NaN bulunan sütunlar silinir.
df.dropna(axis = 1)
Output:
   Bursa     Gunler
0     30  Pazartesi
1     28       Sali
2     26   Carsamba
3     26   Persembe

dicData2 = {"Istanbul": [30,26,28,np.nan], "Ankara": [24, np.nan, 27,29], "Izmir": [40,38,np.nan,41],"Bursa":[30,28,26,26],"Balıkesir": [np.nan, 42, np.nan, 45], "Antalya": [np.nan,np.nan,np.nan,np.nan]}
dicData2
Output:
{'Istanbul': [30, 26, 28, nan], 'Ankara': [24, nan, 27, 29], 'Izmir': [40, 38, nan, 41], 'Bursa': [30, 28, 26, 26], 'Balıkesir': [nan, 42, nan, 45], 'Antalya': [nan, nan, nan, nan]}

df2 = pd.DataFrame(dicData2)
df2
Output:
   Istanbul  Ankara  Izmir  Bursa  Balıkesir  Antalya
0      30.0    24.0   40.0     30        NaN      NaN
1      26.0     NaN   38.0     28       42.0      NaN
2      28.0    27.0    NaN     26        NaN      NaN
3       NaN    29.0   41.0     26       45.0      NaN

days = ["Pazartesi","Sali","Carsamba","Persembe"]
df2["Gunler"] = days
df2.set_index("Gunler")
Output:
           Istanbul  Ankara  Izmir  Bursa  Balıkesir  Antalya
Gunler                                                       
Pazartesi      30.0    24.0   40.0     30        NaN      NaN
Sali           26.0     NaN   38.0     28       42.0      NaN
Carsamba       28.0    27.0    NaN     26        NaN      NaN
Persembe        NaN    29.0   41.0     26       45.0      NaN

#Tüm satırlarda NaN değerler olduğu için boş DataFrame geri döndürülür.
df2.dropna()
Output:
Empty DataFrame
Columns: [Istanbul, Ankara, Izmir, Bursa, Balıkesir, Antalya, Gunler]
Index: []

#En az bir adet any bulunan satırları siler. Yukarıdaki işlem ile aynıdır.
df2.dropna(how = 'any')
Output:
Empty DataFrame
Columns: [Istanbul, Ankara, Izmir, Bursa, Balıkesir, Antalya, Gunler]
Index: []

#Tüm satırları NaN olan değerleri siler.
df2.dropna(how = 'all')
Output:
   Istanbul  Ankara  Izmir  Bursa  Balıkesir  Antalya     Gunler
0      30.0    24.0   40.0     30        NaN      NaN  Pazartesi
1      26.0     NaN   38.0     28       42.0      NaN       Sali
2      28.0    27.0    NaN     26        NaN      NaN   Carsamba
3       NaN    29.0   41.0     26       45.0      NaN   Persembe

#Tüm değerleri NaN olan sütunu siler
df2.dropna(axis = 1, how = 'all')
Output:
   Istanbul  Ankara  Izmir  Bursa  Balıkesir     Gunler
0      30.0    24.0   40.0     30        NaN  Pazartesi
1      26.0     NaN   38.0     28       42.0       Sali
2      28.0    27.0    NaN     26        NaN   Carsamba
3       NaN    29.0   41.0     26       45.0   Persembe

#NaN değerler  value'ye atanan değer ile doldurulur.
df2.fillna(value = 20)
Output:
   Istanbul  Ankara  Izmir  Bursa  Balıkesir  Antalya     Gunler
0      30.0    24.0   40.0     30       20.0     20.0  Pazartesi
1      26.0    20.0   38.0     28       42.0     20.0       Sali
2      28.0    27.0   20.0     26       20.0     20.0   Carsamba
3      20.0    29.0   41.0     26       45.0     20.0   Persembe

Pandas groupby() Fonksiyonu

groupby() fonksiyonu veri setini seçilen belirli bir sütuna göre gruplandırmayı sağlamaktadır. Gruplama işleminden sonra ilgili veri grubu üzerinde max(), min(), count() ve mean() gibi aggregation işlemleri yapılabilir. Kod örneği:

import pandas as pd
import numpy as np
dic = {"Departman": ["Yazılım","Yazılım","Pazarlama","Pazarlama", "Hukuk","Hukuk"],
                   "Calisan Ismi": ["Ahmet","Mehmet","Can","Burak","Zeynep","Barış"],
                    "Maas": [100,150,200,300,400,500]}
dataFrame = pd.DataFrame(dic)
dataFrame
# Output:
   Departman Calisan Ismi  Maas
0    Yazılım        Ahmet   100
1    Yazılım       Mehmet   150
2  Pazarlama          Can   200
3  Pazarlama        Burak   300
4      Hukuk       Zeynep   400
5      Hukuk        Barış   500

groupObject = dataFrame.groupby("Departman") #Hangi kolona göre gruplandıracağımızı seçiyoruz
#Veri setindeki eleman sayısı için count() kullanılır.
groupObject.count()
# Output:
           Calisan Ismi  Maas
Departman                    
Hukuk                 2     2
Pazarlama             2     2
Yazılım               2     2

#Veri setindeki kolonun ortalaması için mean() kullanılır.
groupObject.mean(numeric_only = True)
# Output:
            Maas
Departman       
Hukuk      450.0
Pazarlama  250.0
Yazılım    125.0

#Veri setindeki minimum değerin gösterimi için min() kullanılır.
groupObject = dataFrame.groupby("Departman")["Maas"].min()
groupObject
# Output:
Departman
Hukuk        400
Pazarlama    200
Yazılım      100
Name: Maas, dtype: int64

min_maas_df = dataFrame.loc[dataFrame.groupby("Departman")["Maas"].idxmin()]
min_maas_df
# Output:
   Departman Calisan Ismi  Maas
4      Hukuk       Zeynep   400
2  Pazarlama          Can   200
0    Yazılım        Ahmet   100

#Veri setindeki maksimum değerin gösterimi için max() kullanılır.
groupObject = dataFrame.groupby("Departman")["Maas"].max()
groupObject
# Output:
Departman
Hukuk        500
Pazarlama    300
Yazılım      150
Name: Maas, dtype: int64

max_maas_df = dataFrame.loc[dataFrame.groupby("Departman")["Maas"].idxmax()]
max_maas_df
# Output:
   Departman Calisan Ismi  Maas
5      Hukuk        Barış   500
3  Pazarlama        Burak   300
1    Yazılım       Mehmet   150

Pandas describe() Fonksiyonu

describe() fonksiyonu veri setinin temel istatistiksel özelliklerini vermektedir. Bu özellikler: count, mean(ortalama), std(standart sapma), min(minimum), max(maksimum), yüzde 25, 50 ve 75'lik dilimlerini içermektedir. Kod örneği:

import pandas as pd
import numpy as np
dic = {"Departman": ["Yazılım","Yazılım","Pazarlama","Pazarlama", "Hukuk","Hukuk"],
                   "Calisan Ismi": ["Ahmet","Mehmet","Can","Burak","Zeynep","Barış"],
                    "Maas": [100,150,200,300,400,500]}
dataFrame = pd.DataFrame(dic)
dataFrame
# Output:
   Departman Calisan Ismi  Maas
0    Yazılım        Ahmet   100
1    Yazılım       Mehmet   150
2  Pazarlama          Can   200
3  Pazarlama        Burak   300
4      Hukuk       Zeynep   400
5      Hukuk        Barış   500

# DataFrame'deki 'Maas' sütununun betimsel istatistikleri
dataFrame["Maas"].describe()
# Output:
count      6.00000
mean     275.00000
std      154.11035
min      100.00000
25%      162.50000
50%      250.00000
75%      375.00000
max      500.00000
Name: Maas, dtype: float64

Pandas concat() Fonksiyonu

concat() fonksiyonu Pandas DataFrame veya Series'leri bir eksen boyunca(satır veya sütun) birleştirmektedir. Sütun bazında birleştirme yan yana yapılırken, satır bazında birleştirme üst üste yapılmaktadır. Kod örneği:

import pandas as pd
import numpy as np

dic1 = {"Isim": ["Ahmet","Mehmet","Zeynep","Can"], 
            "Spor": ["Koşu", "Yüzme","Koşu","Basketbol"],
            "Kalori": [100,200,300,400]}
df1 = pd.DataFrame(dic1, index = [0,1,2,3])
df1
# Output:
     Isim       Spor  Kalori
0   Ahmet       Koşu     100
1  Mehmet      Yüzme     200
2  Zeynep       Koşu     300
3     Can  Basketbol     400

dic2 = {"Isim": ["Osman","Levent","Atlas","Fatma"], 
            "Spor": ["Koşu", "Yüzme","Koşu","Basketbol"],
            "Kalori": [200,100,50,300]}
df2 = pd.DataFrame(dic2, index = [4,5,6,7])
df2
# Output:
     Isim       Spor  Kalori
4   Osman       Koşu     200
5  Levent      Yüzme     100
6   Atlas       Koşu      50
7   Fatma  Basketbol     300

dic3 = {"Isim": ["Ayşe","Mahmut","Duygu","Emre"], 
            "Spor": ["Koşu", "Yüzme","Badminton","Tenis"],
            "Kalori": [300,400,500,250]}
df3 = pd.DataFrame(dic3, index = [8,9,10,11])
df3
# Output:
      Isim       Spor  Kalori
8     Ayşe       Koşu     300
9   Mahmut      Yüzme     400
10   Duygu  Badminton     500
11    Emre      Tenis     250

pd.concat([df1,df2,df3], axis = 0) #Satırların birleştirilmesi
# Output:
      Isim       Spor  Kalori
0    Ahmet       Koşu     100
1   Mehmet      Yüzme     200
2   Zeynep       Koşu     300
3      Can  Basketbol     400
4    Osman       Koşu     200
5   Levent      Yüzme     100
6    Atlas       Koşu      50
7    Fatma  Basketbol     300
8     Ayşe       Koşu     300
9   Mahmut      Yüzme     400
10   Duygu  Badminton     500
11    Emre      Tenis     250

df4 = pd.DataFrame([["bird","polly"], ["monkey","george"]], columns= ["animal","name"])
df5 = pd.DataFrame([["a",1],["b",1]], columns = ["letter","number"])
pd.concat([df4,df5], axis = 1) #Sütunların birleştirilmesi
# Output:
   animal    name letter  number
0    bird   polly      a       1
1  monkey  george      b       1

Pandas merge() Fonksiyonu

merge() fonksiyonu SQL'deki JOIN işlemlerine benzer şekilde iki veri setini ortak sütun veya sütunlar doğrultusunda birleştirmektedir. Kod örneği:

import pandas as pd
import numpy as np

 df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2'],
    'A': ['A0', 'A1', 'A2']
})
df2 = pd.DataFrame({
    'key': ['K1', 'K2', 'K3'],
    'B': ['B1', 'B2', 'B3']
})
df1
# Output:
  key   A
0  K0  A0
1  K1  A1
2  K2  A2

df2
# Output:
  key   B
0  K1  B1
1  K2  B2
2  K3  B3

result = pd.merge(df1,df2, on = 'key') #key sütunu üzerinden birleştirme yapılır.
result
# Output:
  key   A   B
0  K1  A1  B1
1  K2  A2  B2

#İlk data sütunu üzerinden soldan birleştirme
result_left = pd.merge(df1,df2, on = 'key', how= 'left')
result_left
# Output:
  key   A    B
0  K0  A0  NaN
1  K1  A1   B1
2  K2  A2   B2

#İkinci data sütunu üzerinden sağdan birleştirme
result_right = pd.merge(df1,df2, on = 'key', how= 'right')
result_right
# Output:
  key    A   B
0  K1   A1  B1
1  K2   A2  B2
2  K3  NaN  B3

#Her iki data sütunu üzerinden dış birleştirme
result_outer = pd.merge(df1,df2, on = 'key', how= 'outer')
result_outer
# Output:
  key    A    B
0  K0   A0  NaN
1  K1   A1   B1
2  K2   A2   B2
3  K3  NaN   B3

Pandas unique() ve nunique() Fonksiyonları

unique() fonksiyonu seçilen sütundaki tekrar eden değerleri kaldırmaktadır. nunique() fonksiyonu ise eşsiz değerlerin sayısını vermektedir. Kod örneği:

import pandas as pd

dic1 = {
    'Isim': ['Can','Barış','Emre','Haktan','Zeynep','Ozan','Onur'],
    'Departman': ['Yazılım','Satış','Pazarlama','Yazılım','Satış','Lojistik','Finans'],
    'Maas': [200,300,400,500,300,550,675]
}
df = pd.DataFrame(dic1)
df
# Output:
     Isim  Departman  Maas
0     Can    Yazılım   200
1   Barış      Satış   300
2    Emre  Pazarlama   400
3  Haktan    Yazılım   500
4  Zeynep      Satış   300
5    Ozan   Lojistik   550
6    Onur     Finans   675

df['Departman'].unique()
# Output:
array(['Yazılım', 'Satış', 'Pazarlama', 'Lojistik', 'Finans'],
      dtype=object)

df['Departman'].nunique()
# Output:
5 # Yazılım, Satış, Pazarlama, Lojistik, Finans

df['Maas'].unique()
# Output:
array([200, 300, 400, 500, 550, 675])

df['Maas'].nunique()
# Output:
6 # 200, 300, 400, 500, 550, 675

Pandas aggfunc Kullanımı

aggfunc(aggregate function) Pandas'ta pivot tablolar ve groupby() işlemlerinde yaygın olarak kullanılmaktadır. İlgili veri setine toplama, ortalama, maksimum, minimum gibi özel hesaplamalar yapılmasına olanak sağlamaktadır. Kod örneği:

import pandas as pd

data = {
    'Departman': ['Yazılım', 'Yazılım', 'Pazarlama', 'Pazarlama', 'Hukuk', 'Hukuk'],
    'Calisan Ismi': ['Ahmet', 'Mehmet', 'Can', 'Burak', 'Zeynep', 'Barış'],
    'Maas': [100, 150, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

# Değerler ve baz alınacak index seçilir. aggfunc ile yapılacak işlem belirlenir.
pivot_df = pd.pivot_table(df, values='Maas', index='Departman', aggfunc='mean')
pivot_df

# Output:
            Maas
Departman       
Hukuk      450.0
Pazarlama  250.0
Yazılım    125.0

pivot_df_multiple = pd.pivot_table(df, values='Maas', index='Departman', aggfunc=['sum', 'mean'])
pivot_df_multiple

# Output:
           sum   mean
          Maas   Maas
Departman            
Hukuk      900  450.0
Pazarlama  500  250.0
Yazılım    250  125.0

# Birden fazla kolonun ortak index olarak kullanımı:
data2 = {
    'Departman': ['Yazılım', 'Yazılım', 'Pazarlama', 'Pazarlama', 'Hukuk', 'Hukuk'],
    'Calisan Ismi': ['Ahmet', 'Ahmet', 'Can', 'Burak', 'Zeynep', 'Barış'],
    'Maas': [100, 150, 200, 300, 400, 500]
}
df2 = pd.DataFrame(data2)
pivot_df2 = pd.pivot_table(df2, values='Maas', index=['Departman', 'Calisan Ismi'], aggfunc='mean')
pivot_df2

# Output:
                         Maas
Departman Calisan Ismi       
Hukuk     Barış         500.0
          Zeynep        400.0
Pazarlama Burak         300.0
          Can           200.0
Yazılım   Ahmet         125.0

# groupby ve agg() ile aggfunc kullanımı
data = {
    'Departman': ['Yazılım', 'Yazılım', 'Pazarlama', 'Pazarlama', 'Hukuk', 'Hukuk'],
    'Calisan Ismi': ['Ahmet', 'Mehmet', 'Can', 'Burak', 'Zeynep', 'Barış'],
    'Maas': [100, 150, 200, 300, 400, 500]
}

df = pd.DataFrame(data)

# Departmana göre maaşlar üzerinde birden fazla toplulaştırma işlemi (sum, mean, max)
grouped = df.groupby('Departman').agg({
    'Maas': ['sum', 'mean', 'max']
})

grouped

# Output:
          Maas            
           sum   mean  max
Departman                 
Hukuk      900  450.0  500
Pazarlama  500  250.0  300
Yazılım    250  125.0  150

Pandas Veri Okuma Fonksiyonları

  • pd.read_csv(): CSV dosyasından veri okumak ve DataFrame'e dönüştürmek için kullanılır.
  • pd.read_excel(): Excel dosyasından veri okumak ve DataFrame'e dönüştürmek için kullanılır.
  • pd.read_sql(): Veritabanından dosyasından veri okumak ve DataFrame'e dönüştürmek için kullanılır.

Kod örneği:

import pandas as pd

# CSV dosyasından veri okunması
df_csv = pd.read_csv('dosya_yolu.csv')

# Excel dosyasından veri okunması
df_excel = pd.read_excel('dosya_yolu.xlsx')

# Excel'de belirli bir sayfanın datasının okunması
df_excel_sheet = pd.read_excel('dosya_yolu.xlsx', sheet_name='Sayfa1')

# Veritabanından veri okunması
import sqlite3

conn = sqlite3.connect('veritabani.db')

df_sql = pd.read_sql('SELECT * FROM tablo_adi', conn)

conn.close()

Pandas Veri Kaydetme Fonksiyonları

  • pd.to_csv(): Veriyi CSV dosyası formatında kayıt eder.
  • pd.to_excel(): Veriyi Excel dosyası formatında kayıt eder.
  • pd.to_sql(): Veriyi SQL veritabanına yazmak için kullanılır.

Kod örneği:

import pandas as pd

# CSV dosyasına veri yazılması
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': ['X', 'Y', 'Z']
})

df.to_csv('dosya_yolu.csv', index=False)

# Excel dosyasına veri yazılması
df.to_excel('dosya_yolu.xlsx', sheet_name='Sayfa1', index=False)

# Veritabanına verilerin yazılması
import sqlite3

conn = sqlite3.connect('veritabani.db')

df.to_sql('tablo_adi', conn, if_exists='replace', index=False)

conn.close()

 Sonuç olarak Pandas Kütüphanesi Python'da veri analizi ve veri manipülasyonu işlemlerini büyük ölçüde kolaylaştıran güçlü bir kütüphanedir. Veri ön işleme, veri temizleme, eksik veriler üzerinde işlemler, verileri birleştirme ve gruplama işlemleri için oldukça fayda sağlamaktadır.