Pandas - add
Cts 29 Kasım 2025add() Metodu
pandas.DataFrame.add metodu, bir DataFrame ile başka bir nesneyi öğe bazında (element-wise) toplamak için kullanılan ikili bir operatör sarmalayıcısıdır.
Sözdizimi:
DataFrame.add(other, axis='columns', level=None, fill_value=None)
Aşama 1: Temel Amaç ve Eşdeğerlik
-
Basit Toplama: Bu metodun temel amacı, bir DataFrame'in her bir hücresini (elementini) başka bir değerle (skaler, Seri veya başka bir DataFrame) toplamaktır.
-
Operatör Eşdeğerliği:
DataFrame.addmetodu, Python'daki standart dataframe + other operatörüne eşdeğerdir. -
Esnek Sarmalayıcılar: Bu metot,
+,-,*,/,%gibi aritmetik operatörler için oluşturulmuş esnek sarmalayıcılar (flexible wrappers) grubuna aittir (sub,mul,div,powgibi diğer işlemler de bu gruba dahildir)
Aşama 2: Esnekliğin Anlamı (Neden + yerine add kullanılır?)
Standart + operatörü ile toplama yapabilirsiniz, ancak add gibi esnek sarmalayıcıları kullanmanın en büyük avantajı, eksik veriler (NaN) için bir doldurma değeri (*fill_value*) belirleme desteği sunmasıdır.
-
Hizalama (Alignment): İki DataFrame'i veya bir DataFrame ile bir Seriyi topladığınızda, Pandas otomatik olarak uyumsuz dizinleri birleştirir (unioned together). Yani, her iki veri yapısında da mevcut olmayan satır veya sütunlar varsa, bunlar sonuç DataFrame'e eklenir.
-
Eksik Veri Doldurma (fill_value): Eğer topladığınız iki girişten birinde veri eksikse (
NaN), hesaplama yapılmadan önce bu eksik değerlerin yerine birfill_valuekoyabilirsiniz.
Önemli Not: Eğer her iki girişin de aynı konumdaki verileri eksikse (
NaNise), doldurma değeri uygulansa bile sonuç yine eksik (NaN) olacaktır.
Aşama 3: Parametreler (İşlemi Nasıl Yönlendirirsiniz?)
add metodu, toplama işlemini kontrol etmenizi sağlayan birkaç önemli parametre alır:
| Parametre | Ne Anlama Gelir? |
|---|---|
| other | Toplama işleminin yapılacağı diğer nesnedir. Bu, bir sayı (skaler), dizi, Series, sözlük veya başka bir DataFrame olabilir. |
| axis | İşlemin hangi eksende eşleşeceğini belirtir. 0 veya 'index' (satırlar arası eşleştirme) ya da 1 veya 'columns' ise (sütunlar arası eşleştirme) olarak ayarlanabilir. |
| fill_value | Hesaplama öncesinde eksik (NaN) değerlerin yerine konulacak değerdir. |
| level | MultiIndex (Çoklu Dizin) kullanılıyorsa, eşleştirmenin hangi dizin seviyesinde yapılacağını belirtir. |
axis parametresi için kullanabileceği iki ana değer vardır:
| Değer | Anlamı | Eşleştirme Yönü |
|---|---|---|
| 0 veya 'index' | Dizin (Satırlar) boyunca karşılaştır | Yatay (Satır İsimleri) |
| 1 veya 'columns' | Sütunlar boyunca karşılaştır | Dikey (Sütun İsimleri) |
Önemli Not:
DataFrame.addmetodunda varsayılan (default) değer 'columns' (yani 1) olarak ayarlanmıştır.
Aşama 4: Basit Uygulama Örnekleri
Örnek Veri Çerçevemiz;
import pandas as pd
df = pd.DataFrame({'angles': [0, 3, 4],
'degrees': [360, 180, 360]},
index=['circle', 'triangle', 'rectangle'])
print(df)
Çıktı:
angles degrees
circle 0 360
triangle 3 180
rectangle 4 360
1. Skaler Değer ile Matematiksel İşlemler
TOPLAMA İŞLEMİ
Bir DataFrame'e sabit bir değer eklemek istediğinizde, hem toplama (+) operatörü hem de add metodunu kullanabilirsiniz ve sonuçlar aynı olacaktır.
Girdi (Örnek DataFrame df):
-
'angles' (Açılar) sütununda 0, 3, 4 değerleri.
-
İşlem:
df + 1veyadf.add(1). -
Sonuç: DataFrame'deki her bir değer 1 artar (0 olur 1, 360 olur 361 vb.).
Kod ve Çıktısı:
print(df.add(1)) # print(df + 1) işlemi ile eşdeğer
Çıktı:
angles degrees
circle 1 361
triangle 4 181
rectangle 5 361
ÇIKARMA İŞLEMİ:
İlk sütundan (angles) 1 değerini, ikinci sütundan (degrees) 2 değerini çıkaralım.
df.sub([1, 2], axis='columns') # print(df - [1, 2]) işlemi ile eşdeğer
Çıktı:
angles degrees
circle -1 358
triangle 2 178
rectangle 3 358
axis parametresi ile eksenlere göre liste ve seriyi çıkaralım;
print(df.sub(pd.Series([1, 3, 5],
index=['circle', 'triangle', 'rectangle']),
axis='index'))
Çıktı:
angles degrees
circle -1 359
triangle 0 177
rectangle -1 355
Görüldüğü gibi, circle satırından 1, triangle satırından 3 ve rectangle satırından 5 değerleri çıkarıldı.
BÖLME İŞLEMİ:
Orjinal Veri çerçevesindeki tüm değerleri 10'a bölelim;
print(df.div(10)) # print(df / 10) işlemi ile eşdeğer
Çıktı:
angles degrees
circle 0.0 36.0
triangle 0.3 18.0
rectangle 0.4 36.0
ÇARPMA İŞLEMİ:
Basit çarpma işlemi yapalım;
print(df.mul(5)) # print(df * 5) ile eşdeğer
Çıktı:
angles degrees
circle 0 1800
triangle 15 900
rectangle 20 1800
Eksenleri (sütunları) bir Sözlük yapısı ile belirtilen değerğerle çarpalım;
print(df.mul({'angles': 0, 'degrees': 2}))
Çıktı:
angles degrees
circle 0 720
triangle 0 360
rectangle 0 720
angles sütununu0 ile degrees sütununu 2 değeri ile çarpmış olduk.
Bir de satırlara göre farklı değerlerle çarpma işlemi uygulayalım;
print(df.mul({'circle': 0,
'triangle': 2,
'rectangle': 3},
axis='index'))
Çıktı:
angles degrees
circle 0 0
triangle 6 360
rectangle 12 1080
circle satırı 0 ile, triangle satırı 2 ile, rectangle satırı da 3 ile çarpıldı.
2. Uyumsuz Şekillerle Çalışma ve fill_value** Kullanımı**
fill_value parametresinin kullanımı, add metodunun (ve diğer mul, sub ve div gibi esnek sarmalayıcıların) gücünü gösterir. Farklı şekillerdeki iki DataFrame'i çarptığımızı varsayalım.
• Senaryo: iki sütunlu df ile sadece tek bir sütunu olan other isimli başka bir DataFrame'i çarpmak (mul) istiyoruz.
• Operatör Kullanımı (df other): Eğer other'da olmayan bir sütun varsa (örneğin 'degrees'), bu sütundaki sonuçlar NaN (Not a Number - Eksik değer) olarak döner.
• Esnek Metot Kullanımı (df.mul(other, fill_value=0)): Eğer fill_value=0 olarak ayarlanırsa, ikinci DataFrame'de (other) eksik olan yerler hesaplama yapılmadan önce 0 ile doldurulur. Böylece, normalde NaN olacak çarpma sonuçları (çünkü 0 ile çarpılır), 0.0 olarak döner.
Bu,
addmetodu için de geçerlidir. Eğer toplama işleminde eksik verilerinizi 0 ile doldurursanız, o verilerin kaybolmasını engellemiş olursunuz.
İKİ FARKLI VERİ ÇERÇEVESİNİ ÇARPALIM:
Öncelikle other adında angles adında tek sütundan oluşan bir veri çerçevesi oluşturalım.
other = pd.DataFrame({'angles': [0, 3, 4]},
index=['circle', 'triangle', 'rectangle'])
print(other)
Çıktı:
angles
circle 0
triangle 3
rectangle 4
Şimdi df ile other tablolarını çarpalım;
print(df.mul(other)) # print(df * other) ile eşdeğer
Çıktı:
angles degrees
circle 0 NaN
triangle 9 NaN
rectangle 16 NaN
other tablomuzda degrees sütunu olmadığı için çarpma işlemi sonucundaki degrees sütunu değerleri NaN olarak karşımıza çıktı.
Bu sorunu çözmek için fill_value parametresinden yararlanabiliriz;
print(df.mul(other, fill_value=0))
Çıktı:
angles degrees
circle 0 0.0
triangle 9 0.0
rectangle 16 0.0
İKİ FARKLI VERİ ÇERÇEVESİNİ TOPLAMAYALIM:
Önce df2 isimli angles adında tek sütundan oluşan bir veri çerçevesi oluşturalım. Hem df hem de df2 tablomuza bakalım;
df2 = pd.DataFrame({'angles': [50, 60, 70]},
index=['circle', 'triangle', 'rectangle'])
print("df:\n", df)
print("df2:\n", df2)
Çıktı:
df:
angles degrees
circle 0 360
triangle 3 180
rectangle 4 360
df2:
angles
circle 50
triangle 60
rectangle 70
Şimdi bu iki tablomuzu add metodu ile toplayalım;
print(df.add(df2))
Çıktı:
angles degrees
circle 50 NaN
triangle 63 NaN
rectangle 74 NaN
df2 tablomuzda degrees sütunu olmadığı için toplama işlemi sonucundaki degrees sütunu değerleri NaN olarak karşımıza çıktı.
Bu sorunu çözmek için yine fill_value parametresinden yararlanıyoruz;
print(df.add(df2, fill_value=0))
Çıktı:
angles degrees
circle 50 360.0
triangle 63 180.0
rectangle 74 360.0
fill_value=0 olarak ayarlandığı için, ikinci DataFrame'de (df2) eksik olan yerler hesaplama yapılmadan önce 0 ile dolduruldu. Böylece, normalde NaN olacak toplama işlemi sonuçları, (0 ile toplandığı için) geçerli bir değer olarak döndü.