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.| Kural | Anlamı | Örnek kullanım |
|---|---|---|
| min | Dakikalık aralık | Saatlik veriyi dakikalık gruplara ayırma veya dakikayı başka bir frekansa dönüştürme |
| h | Saatlik aralık | 15 dakikalık kayıtları saatlik toplulaştırma |
| D | Günlük aralık | Gün içindeki kayıtları günlük değere dönüştürme |
| W | Haftalık aralık | Günlük verileri haftalık rapora dönüştürme |
| ME | Ay sonu aralığı | Günlük veya saatlik verileri ay bazında toplulaştırma |
Farklı toplulaştırma yöntemleri
Yeni frekanstaki değer, verinin türüne göre seçilmelidir. Ölçüm verilerindemean(), 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 bunudatetime 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.