Tarih aralıklarına göre Pandas DataFrame’lerini verimli bir şekilde filtrelemek, veri analizinde çok önemli bir beceridir. Pandas bunu gerçekleştirmek için her birinin güçlü ve zayıf yönleri olan çeşitli yöntemler sunar. Bu makale, sözdizimlerini, verimliliğini ve kullanım durumlarını karşılaştıran dört popüler yaklaşımı ele almaktadır.
İçerik Tablosu
- Boolean Maskeleme ile Filtreleme
.query()
Yöntemini Kullanma.isin()
Yöntemini Kullanma.between()
Yönteminden Yararlanma
Boolean Maskeleme ile Filtreleme
Boolean maskeleme, en temel ve esnek yaklaşımı sunar. Belirtilen koşullara göre satırları filtreleyen bir boolean dizi (maske) oluşturur. Bu yöntem, karmaşık senaryolara oldukça uyumludur.
import pandas as pd
data = {'Tarih': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Değer': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
baslangic_tarihi = pd.to_datetime('2023-11-01')
bitis_tarihi = pd.to_datetime('2024-01-01')
maske = (df['Tarih'] >= baslangic_tarihi) & (df['Tarih'] <= bitis_tarihi)
filtrelenmis_df = df[maske] #df.loc[maske]'den daha verimli
print(filtrelenmis_df)
.query()
Yöntemini Kullanma
.query()
yöntemi, filtreleme için daha okunabilir ve özlü bir alternatif sunar. Karmaşık koşullar için özellikle faydalıdır.
baslangic_tarihi = '2023-11-01'
bitis_tarihi = '2024-01-01'
filtrelenmis_df = df.query('@baslangic_tarihi <= Tarih <= @bitis_tarihi')
print(filtrelenmis_df)
.isin()
Yöntemini Kullanma
.isin()
yöntemi, sürekli bir aralık yerine belirli tarihlerin bir listesine göre satırları seçmeniz gerektiğinde uygundur. Büyük sürekli aralıklar için daha az verimlidir.
eklenecek_tarihler = pd.to_datetime(['2023-11-15', '2023-12-01'])
filtrelenmis_df = df[df['Tarih'].isin(eklenecek_tarihler)]
print(filtrelenmis_df)
.between()
Yönteminden Yararlanma
.between()
yöntemi, sürekli bir tarih aralığında satırları seçmek için kolaylaştırılmış bir yaklaşım sunar. Verimli ve okunması kolaydır.
baslangic_tarihi = pd.to_datetime('2023-11-01')
bitis_tarihi = pd.to_datetime('2024-01-01')
filtrelenmis_df = df[df['Tarih'].between(baslangic_tarihi, bitis_tarihi, inclusive='both')] #açıklık için inclusive argümanı eklendi
print(filtrelenmis_df)
Özetle, Pandas tarih tabanlı filtreleme için çeşitli yöntemler sunar. En uygun seçim, belirli ihtiyaçlarınıza ve kodlama stilinize bağlıdır. Boolean maskeleme maksimum esneklik sağlar, .query()
okunabilirliği artırır ve .between()
sürekli aralık seçimini basitleştirir. En iyi performans için tarih sütununuzun datetime64
türünde olduğundan emin olun.