Pandas, Operations, groupby, join, merge

Kategori: Python , 12 Eylül 2019 , JanFranco


Bu yazımda Pandas kütüphanesini kullanarak veri analiz operasyonları gerçekleştireceğiz. Kütüphaneyi import ederek başlayalım:


import pandas as pd
Manuel olarak basit bir veri kümesi oluşturalım:


data = {"Department": ["IT", "HR", "PR", "PR", "IT", "HR"],
        "Worker": ["Jan", "Jane", "JohnD", "JaneD", "John", "Nick"],
        "Salary": [3000, 3500, 2500, 4500, 4000, 2000]}

df = pd.DataFrame(data=data)
print(df)
>>
  Department Worker  Salary
0         IT    Jan    3000
1         HR   Jane    3500
2         PR  JohnD    2500
3         PR  JaneD    4500
4         IT   John    4000
5         HR   Nick    2000
groupby() methodunu kullanarak departmanları gruplayalım ve sum() methodu ile her bir departmandaki toplam maaşı görelim. loc methodunu da kullanarak tek bir departmanın toplam maaş bilgisini görelim:


print(df.groupby("Department").sum())
print(int(df.groupby("Department").sum().loc["IT"]))
>>
Department        
HR            5500
IT            7000
PR            7000

7000
gropbuy() methodu ile tekrar departmanları gruplayalım. count() methodu ile kaçar veri olduğunu, max() methodu ile maksimum veriyi, min() methodu ile minimum veriyi, mean() methodu ile veri ortalamasını bulalım:


print(df.groupby("Department").count())
>>
            Worker  Salary
Department                
HR               2       2
IT               2       2
PR               2       2
print(df.groupby("Department").max())
>>
           Worker  Salary
Department               
HR           Nick    3500
IT           John    4000
PR          JohnD    4500
print(df.groupby("Department").mean())
>>
            Salary
Department        
HR            2750
IT            3500
PR            3500
print(df.groupby("Department").min()["Salary"]["IT"])
>>
3000
İki yeni veri kümesi oluşturalım. concat() methodu ile iki kümeyi birleştirelim. axis parametresine 1 değerini vererek sütun bazlı birleştirme yapabiliriz:


data_1 = {"A": ["A1","A2","A3","A4"], "B":["B1","B2","B3","B4"], "C":["C1","C2","C3","C4"],}
data_2 = {"A": ["A5","A6","A7","A8"], "B":["B5","B6","B7","B8"], "C":["C5","C6","C7","C8"],}

df1 = pd.DataFrame(data=data_1, index=[1, 2, 3, 4])
df2 = pd.DataFrame(data=data_2, index=[5, 6, 7, 8])

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


data_1 = {"A": ["A1", "A2", "A3", "A4"], "B": ["B1", "B2", "B3", "A4"],}
data_2 = {"X": ["X1", "X2", "X3"], "Y": ["Y1", "Y2", "Y3"],}

df1 = pd.DataFrame(data=data_1, index=[1, 2, 3, 4])
df2 = pd.DataFrame(data=data_2, index=[1, 2, 3])

df3 = df1.join(df2)
df4 = df2.join(df1)
print(df3)
print(df4)
>>
    A   B    X    Y
1  A1  B1   X1   Y1
2  A2  B2   X2   Y2
3  A3  B3   X3   Y3
4  A4  A4  NaN  NaN
    X   Y   A   B
1  X1  Y1  A1  B1
2  X2  Y2  A2  B2
3  X3  Y3  A3  B3
df3 verisetinde df1.join dediğimizden dolayı, 4 satırımız olacaktır. join(df2) methodunu kullandığımız için satırların devamına X ve Y sütunları da eklenmiştir ancak X ve Y sütunlarının 4. satırları NaN değere sahiptir. df4 verisetinde ise df2.join dediğimiz için ve parametre olarak df1 verisetini gönderdiğimiz için, 3 satırımız olacak ve df1 verisetinin 4. satırı birleşme işlemine girmeyecektir.
İki yeni veri seti oluşturalım, merge() methodu ile birleştirelim. merge() methodunun on parametresine "key" değerini atarsak iki veri kümesini key sütunundaki ortak verilere göre birleştirecektir.


data_1 = {"A": ["A1", "A2", "A3"], "B": ["B1", "B2", "B3"], "key": ["K1","K2","K3"]}
data_2 = {"X": ["X1", "X2", "X3", "X4"], "Y": ["Y1", "Y2", "Y3", "Y4"], "key": ["K1","K2","K5","K4"]}

df1 = pd.DataFrame(data=data_1, index=[1, 2, 3])
df2 = pd.DataFrame(data=data_2, index=[1, 2, 3, 4])

df3 = pd.merge(df1, df2, how="inner", on="key")
print(df3)
>>
    A   B key   X   Y
0  A1  B1  K1  X1  Y1
1  A2  B2  K2  X2  Y2
Burada how parametersinin değerini inner olarak atadık. Inner merge veya inner join işleminde, on parametresinde verilen sütunun iki kümede de ortak satırlarını alırız. Left merge veya left join işleminde, ilk verilen kümenin yani sol kümenin tüm satırları alınır. Eğer on parametresindeki ortak sütunun sağ kümede boş satırları var ise NaN değeri atanır. Outer join / outer merge işleminde iki kümenin tüm satırları alınır, ortak satırlar tek basılır, farklı satırlar NaN değeri ile basılır.
Yeni bir veri kümesi oluşturalım. head() methodu ile veri kümesinin ilk 5 satırını görebiliriz. Parametre olarak herhangi bir değer vererek ilk n satırı görebiliriz. unique() methodu ile eşsiz değerleri görebiliriz. Örneğin 100 100 200 200 300 300 300 şeklinde veriler var ise bu method bize sadece 100 200 300 listesini dönecektir. nunique() methodu ile bu değerlerin sayısını return alabiliriz. value_counts() methodu ile her bir değerin kaç kez tekrar ettiğini görebiliriz:


df = pd.DataFrame({"Column1": [1, 2, 3, 4, 5, 6],
                   "Column2": [100, 100, 200, 300, 300, 100],
                   "Column3": ["Jan", "Jane", "JohnD", "JaneD", "Nick", "Will"]})

print(df.head())
>>
   Column1  Column2 Column3
0        1      100     Jan
1        2      100    Jane
2        3      200   JohnD
3        4      300   JaneD
4        5      300    Nick
print(df["Column2"].unique())
>>
[100 200 300]
print(df["Column2"].nunique())
>>
3
print(df["Column2"].value_counts())
>>
100    3
300    2
200    1
apply() methodu ile tanımladığımız bir fonksiyonu veri kümesi üzerinde uygulayabiliriz. Parametre olarak aldığı sayıyı 3 ile çarpıp return eden bir fonksiyon tanımlayalım ve veri kümesi üzerinde uygulayalım:


def times3(x):
    return x * 3


print(df["Column2"].apply(times3))
>>
0    300
1    300
2    600
3    900
4    900
5    300
columuns değeri ile sütunları, index değeri ile indexleri görüntüleyebilir, sort_values() methodu ile sütundaki değerleri sıralayabiliriz.


df = pd.DataFrame({"Column1": [1, 2, 3, 4, 5, 6],
                   "Column2": [100, 100, 200, 300, 300, 100],
                   "Column3": ["Jan", "Jane", "JohnD", "JaneD", "Nick", "Will"]})

print(df.columns)
print(df.index)
print(df.sort_values("Column2"))
>>
Index(['Column1', 'Column2', 'Column3'], dtype='object')
RangeIndex(start=0, stop=6, step=1)
   Column1  Column2 Column3
0        1      100     Jan
1        2      100    Jane
5        6      100    Will
2        3      200   JohnD
3        4      300   JaneD
4        5      300    Nick
Yeni bir veri kümesi oluşturalım. Veri kümesini ilk görüntülediğimizde index olarak 0, 1, 2, 3 şeklinde gitmekte, sütun isimleri ise ay, şehir, nemdir. pivot_table methodu ile ayları index, şehri sütun, nemleri ise veri yapabiliriz:


df = pd.DataFrame({
    "Month": ["March", "April", "May", "March", "April", "May", "March", "April", "May"],
    "City": ["Ankara", "Ankara", "Ankara", "Istanbul", "Istanbul", "Istanbul", "Izmir", "Izmir", "Izmir"],
    "Humidity": [10, 25, 50, 21, 67, 80, 30, 70, 75]})

print(df)

df = df.pivot_table(index="Month", columns="City", values="Humidity")
print(df)
>>
   Month      City  Humidity
0  March    Ankara        10
1  April    Ankara        25
2    May    Ankara        50
3  March  Istanbul        21
4  April  Istanbul        67
5    May  Istanbul        80
6  March     Izmir        30
7  April     Izmir        70
8    May     Izmir        75

City   Ankara  Istanbul  Izmir
Month                         
April      25        67     70
March      10        21     30
May        50        80     75


Sonraki Yazı: Matplotlib, Creating and Designing Graphs
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın