Garfield
YZF Admin
Mevcut sütunlardan yeni özellik oluşturmak için pandas'ta önce ilgili sütunları seçip bir ifade, fonksiyon veya koşul uygulayın; ardından sonucu yeni bir sütuna atayın. Böylece ham veriyi koruyarak örneğin toplam tutar, yaş grubu, metin uzunluğu veya iki tarih arasındaki gün sayısı gibi modelleme ve analizde kullanılabilecek yeni değişkenler elde edebilirsiniz. En güvenli yaklaşım, işlemi kopya bir DataFrame üzerinde yapmak ve yeni sütunun beklenen veri türüyle değerlerini kontrol etmektir.
Çıktı şu anlama gelir:
Burada
Mümkün olduğunda doğrudan sütun işlemlerini ve pandas'ın vektörel yöntemlerini tercih edin. Bunlar genellikle her satır için Python fonksiyonu çalıştıran
Bu örnekte 10.000 ve üzerindeki değerler
Üç veya daha fazla koşul varsa
Yeni sütun beklenenden farklı çıkarsa önce girdi sütunlarının veri türünü, eksik değerleri, koşulların sınırlarını ve sütunların aynı satırları temsil edip etmediğini kontrol edin. Hesaplamanın kendisi doğru olsa bile yanlış birimle tutulan değerler (örneğin kuruş ve lira) sonucu anlamsızlaştırabilir.
En basit yöntem: sütunları doğrudan hesaplamak
Varsayımsal olarak elinizdefiyat ve adet sütunları bulunan bir DataFrame olduğunu düşünelim:
Python:
import pandas as pd
df = pd.DataFrame({
"fiyat": [100, 250, 80],
"adet": [2, 1, 5]
})
df["toplam_tutar"] = df["fiyat"] * df["adet"]
print(df)
Çıktı şu anlama gelir:
Kod:
fiyat adet toplam_tutar
0 100 2 200
1 250 1 250
2 80 5 400
Burada
toplam_tutar, aynı satırdaki fiyat ile adet değerlerinin çarpılmasıyla oluşturulur. pandas, Series işlemlerinde değerleri indeks etiketlerine göre hizalar. Aynı DataFrame’den alınan iki sütun ortak indeksi paylaşır; farklı kaynaklardan gelen sütunlarda ise indekslerin aynı gözlemleri temsil ettiğini ayrıca doğrulayın.Kullanım durumuna göre uygun yöntem
Yeni özelliğin nasıl hesaplanacağı, işlemin yalnızca sütunlar arası aritmetik mi yaptığına yoksa koşul veya özel bir dönüştürme mi gerektirdiğine bağlıdır.| İhtiyaç | Uygun yöntem | Örnek |
|---|---|---|
| Sütunlar arasında aritmetik işlem | Doğrudan sütun işlemi | df["gelir"] - df["gider"] |
| Koşula göre değer üretme | np.where() veya np.select() | gelir >= 10000 ise "yüksek" |
| Her satıra özel Python mantığı | apply() | Bir metinden özel değer çıkarma |
| Metin, tarih veya sayısal dönüşüm | pandas'ın vektörel yöntemleri | .str.len(), .dt.month, .round() |
apply() kullanımından daha açık ve verimli olur. apply() ise özel mantığın hazır bir vektörel karşılığı bulunmadığında uygundur.Koşula göre özellik oluşturma
Örneğingelir sütununa göre müşterileri iki gruba ayırabilirsiniz:
Python:
import numpy as np
df = pd.DataFrame({
"gelir": [8000, 12500, 18000]
})
df["gelir_grubu"] = np.where(
df["gelir"] >= 10000,
"yüksek",
"standart"
)
print(df)
Bu örnekte 10.000 ve üzerindeki değerler
yüksek, diğerleri standart olur. Sınır değerinin hangi gruba girmesi gerektiğini açıkça belirleyin; >= ile > aynı sonucu vermez.Üç veya daha fazla koşul varsa
np.select() daha okunaklıdır:
Python:
kosullar = [
df["gelir"] < 10000,
df["gelir"].between(10000, 15000),
df["gelir"] > 15000
]
etiketler = ["düşük", "orta", "yüksek"]
df["gelir_seviyesi"] = np.select(
kosullar,
etiketler,
default="belirsiz"
)
default değeri, hiçbir koşula uymayan satırlarda kullanılacak sonucu belirler. Eksik değerlerin yanlışlıkla bir kategoriye girmesini istemiyorsanız onları ayrıca ele alın.Metin ve tarihlerden yeni özellik üretme
Metin sütunlarında pandas'ın.str erişicisini, tarih sütunlarında ise önce to_datetime() ve ardından .dt erişicisini kullanabilirsiniz:
Python:
df = pd.DataFrame({
"ad": ["Ali Veli", "Ayşe Demir"],
"siparis_tarihi": ["2026-01-10", "2026-02-15"]
})
df["ad_uzunlugu"] = df["ad"].str.len()
df["siparis_tarihi"] = pd.to_datetime(df["siparis_tarihi"])
df["siparis_ayi"] = df["siparis_tarihi"].dt.month
print(df[["ad", "ad_uzunlugu", "siparis_ayi"]])
ad_uzunlugu karakter sayısını, siparis_ayi ise tarihin ay numarasını içerir. Tarihleri dönüştürmeden .dt.month gibi tarih özelliklerini kullanmaya çalışırsanız beklenmeyen bir tür hatası alabilirsiniz.Uygulama sırası ve kontrol
Yeni özellik oluştururken aşağıdaki sırayı izleyin:- Girdi sütunlarını kontrol edin. Sütun adlarının gerçekten mevcut olduğunu ve sayısal işlem yapılacak sütunların metin olarak okunmadığını doğrulayın.
df.dtypesvedf.head()bu kontrol için yeterlidir. - Eksik değerleri değerlendirin. Eksik bir girdi, kullanılan işleme göre yeni sütunda da eksik değer oluşturabilir veya koşullu sınıflandırmayı etkileyebilir. Eksik değerleri silme ya da doldurma kararını hesaplamanın amacına göre verin; otomatik olarak sıfır kabul etmeyin.
- Yeni sütunu atayın. Hesabı
df["yeni_ozellik"] = ...biçiminde açık bir adla DataFrame'e ekleyin. Aynı adı kullanırsanız mevcut sütunun üzerine yazılabilir. - Sonucu doğrulayın.
df[["girdi1", "girdi2", "yeni_ozellik"]].head()ile birkaç satırı karşılaştırın; ayrıcadf["yeni_ozellik"].dtype,isna().sum()ve gerekiyorsadescribe()çıktısını inceleyin. - Özelliğin anlamını kontrol edin. Hesaplama doğru görünse bile yeni sütunun hedef bilgiyi yanlışlıkla kullanmadığından emin olun. Özellikle tahmin modellerinde, tahmin anından sonra öğrenilebilecek bir sütunu girdi olarak kullanmak veri sızıntısına yol açabilir.
apply() ne zaman kullanılmalı?
Satırdaki birden fazla değeri özel bir kuralla birleştirmeniz gerekiyorsaapply() kullanılabilir:
Python:
df = pd.DataFrame({
"urun": ["Kalem", "Defter"],
"fiyat": [10, 25],
"adet": [3, 2]
})
def etiket_olustur(satir):
tutar = satir["fiyat"] * satir["adet"]
return f"{satir['urun']} - {tutar} TL"
df["siparis_etiketi"] = df.apply(etiket_olustur, axis=1)
print(df["siparis_etiketi"])
axis=1, fonksiyonun her satırı bir bütün olarak almasını sağlar. Ancak yalnızca basit bir çarpma veya toplama yapıyorsanız apply() yerine doğrudan sütun işlemi kullanın; bu hem niyeti daha açık gösterir hem de gereksiz satır bazlı işlemden kaçınır.Yeni sütun beklenenden farklı çıkarsa önce girdi sütunlarının veri türünü, eksik değerleri, koşulların sınırlarını ve sütunların aynı satırları temsil edip etmediğini kontrol edin. Hesaplamanın kendisi doğru olsa bile yanlış birimle tutulan değerler (örneğin kuruş ve lira) sonucu anlamsızlaştırabilir.