• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Pandas resample ile zaman serisi frekansı nasıl değiştirilir?

Garfield

Yönetici
YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
428
Mesajlar
441
AI Seviyesi
Yeni
resample() yöntemiyle bir zaman serisini saatlik, günlük, haftalık veya aylık frekansa dönüştürebilirsiniz. Bunun için tarih bilgisini DatetimeIndex yapıp uygun bir frekans kuralı seçin; ardından .mean(), .sum(), .first() veya .last() gibi bir toplulaştırma yöntemi uygulayın. Aşağıdaki örnekte saatlik veriler günlük ortalamaya çevriliyor.

Temel kullanım​

resample(), zaman aralıklarını yeniden gruplayan bir pandas yöntemidir. Frekansı değiştirmek tek başına değerleri hesaplamaz; yeni aralığa düşen kayıtların nasıl birleştirileceğini ayrıca belirtmeniz gerekir.

Örneğin 15 dakikalık ölçümleri saatlik ortalamaya çevirmek için 15min verisini h aralığına yeniden örnekleyip mean() uygularsınız:

Python:
import pandas as pd

veri = pd.DataFrame(
    {
        "sicaklik": [20, 22, 24, 23, 25, 27, 26, 28]
    },
    index=pd.to_datetime(
        [
            "2026-11-07 08:00",
            "2026-11-07 08:15",
            "2026-11-07 08:30",
            "2026-11-07 08:45",
            "2026-11-07 09:00",
            "2026-11-07 09:15",
            "2026-11-07 09:30",
            "2026-11-07 09:45",
        ]
    ),
)

saatlik = veri.resample("h").mean()
print(saatlik)

Bu örnekte çıktı yaklaşık olarak şu değerleri içerir:

Kod:
                     sicaklik
2026-11-07 08:00       22.25
2026-11-07 09:00       26.50

İlk satır 08:00–08:59 arasındaki dört ölçümün, ikinci satır ise 09:00–09:59 arasındaki dört ölçümün ortalamasıdır. Bu işlem yeni ölçüm üretmez; mevcut kayıtları seçtiğiniz zaman aralıklarına göre birleştirir.

Frekans kuralını seçme​

Kural, verilerin hangi zaman aralığına gruplanacağını belirler. Aşağıdaki seçimler en sık kullanılanlardır.
KuralAnlamıÖrnek kullanım
minDakikalık aralıkSaatlik veriyi dakikalık gruplara ayırma veya dakikayı başka bir frekansa dönüştürme
hSaatlik aralık15 dakikalık kayıtları saatlik toplulaştırma
DGünlük aralıkGün içindeki kayıtları günlük değere dönüştürme
WHaftalık aralıkGünlük verileri haftalık rapora dönüştürme
MEAy sonu aralığıGünlük veya saatlik verileri ay bazında toplulaştırma
Kullandığınız pandas sürümünde bir frekans kuralı uyarı verirse aynı anlamdaki güncel kısa gösterimi tercih edin. Özellikle büyük-küçük harf ve ayın başlangıcı veya sonu gibi ayrımlar, beklenen zaman etiketlerini değiştirebilir.

Farklı toplulaştırma yöntemleri​

Yeni frekanstaki değer, verinin türüne göre seçilmelidir. Ölçüm verilerinde mean(), işlem veya satış miktarlarında sum(), açılış-kapanış mantığında ise first() ve last() daha uygun olabilir.

Python:
gunluk_ortalama = veri.resample("D").mean()
gunluk_toplam = veri.resample("D").sum()
ilk_deger = veri.resample("D").first()
son_deger = veri.resample("D").last()

Birden fazla sütun için her sütuna ayrı yöntem uygulamak da mümkündür:

Python:
veri = pd.DataFrame(
    {
        "sicaklik": [20, 22, 24, 23],
        "tuketim": [3, 4, 2, 5],
    },
    index=pd.to_datetime(
        [
            "2026-11-07 08:00",
            "2026-11-07 08:15",
            "2026-11-07 08:30",
            "2026-11-07 08:45",
        ]
    ),
)

sonuc = veri.resample("h").agg(
    {
        "sicaklik": "mean",
        "tuketim": "sum",
    }
)
print(sonuc)

Burada sicaklik saatlik ortalama, tuketim ise saatlik toplam olur. Aynı yöntemi bütün sütunlara uygulamak yerine sütunun anlamına göre ayrı toplulaştırma seçmek daha doğru sonuç verir.

Tarih sütunu dizin değilse​

Tarih bilgisi ayrı bir sütundaysa önce bunu datetime türüne çevirin. Ardından on="tarih" parametresiyle hangi sütunun kullanılacağını belirtin:

Python:
veri = pd.DataFrame(
    {
        "tarih": [
            "2026-11-07 08:00",
            "2026-11-07 08:30",
            "2026-11-07 09:00",
        ],
        "deger": [10, 14, 18],
    }
)

veri["tarih"] = pd.to_datetime(veri["tarih"])

saatlik = veri.resample("h", on="tarih")["deger"].mean()
print(saatlik)

Bu yöntemde tarih sütunu veri çerçevesinde kalır; resample() gruplama için yalnızca onu kullanır. Tarih sütununu dizin yapmak isterseniz alternatif olarak şu sırayı kullanabilirsiniz:

Python:
veri["tarih"] = pd.to_datetime(veri["tarih"])
veri = veri.set_index("tarih")
saatlik = veri.resample("h").mean()

Daha yüksek frekansa çıkarken dikkat edilmesi gerekenler​

Günlük veriyi saatliğe çevirmek, mevcut günlük değeri 24 gerçek saatlik ölçüme dönüştürmez. Bu işlemde yeni zaman aralıkları oluşur ve bazıları boş kalabilir. Boş aralıkları doldurmak için önce hangi değerin mantıklı olduğuna karar verin:

Python:
saatlik = gunluk.resample("h").asfreq()
saatlik_doldurulmus = saatlik.ffill()

asfreq() yalnızca yeni frekanstaki mevcut eşleşmeleri gösterir; ffill() ise önceki değeri ileri taşır. Bu yöntem, değerin aradaki saatlerde sabit kaldığı varsayımını yapar. Ölçümün gerçekten sabit kaldığı kanıtlanmıyorsa eksik saatleri otomatik doldurmak yerine NaN olarak bırakmak daha güvenlidir.

Sonucu kontrol etme​

İşlemden sonra dizinin tarih türünü, zaman aralığını ve satır sayısını kontrol edin:

Python:
print(veri.index.dtype)
print(saatlik.index.min(), saatlik.index.max())
print(saatlik.head())
print(saatlik.isna().sum())

Beklenenden daha az satır görmeniz, kayıtların daha büyük aralıklarda birleştirildiğini gösterir; bu tek başına veri kaybı anlamına gelmez. Beklenmeyen NaN değerleri ise ilgili zaman aralığında veri olmadığını veya seçilen toplulaştırmanın boş gruplara sonuç üretemediğini gösterebilir. Ayrıca tarih dizininin sıralı ve doğru zaman diliminde olduğundan emin olun; yanlış saat dilimi, verilerin başka bir gün veya saate gruplanmasına neden olabilir.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst