Garfield
YZF Admin
Metin biçimindeki tarih sütununu pandas'ta tarih türüne çevirmek için
Ön koşul olarak pandas'ın içe aktarılmış olması ve tarihlerin bulunduğu sütunun metin değerleri içermesi gerekir. Aşağıdaki örnekteki veriler varsayımsaldır:
Pandas 3’te bu örneğin tür çıktısında
Bir CSV dosyasını okurken dönüşümü aynı akışta da yapabilirsiniz:
Dönüşümün gerçekten yapıldığını
Gün, ay ve yıl sırasının açıkça bilindiği verilerde
Yaygın biçim belirteçleri şunlardır:
Biçimi belirterek yapılan dönüşüm, biçime uymayan bir değer varsa hata verebilir. Bu davranış, veri kalitesindeki sorunu gizlemek istemediğiniz durumlarda yararlıdır. Dönüşümden sonra
Sütunda boş, eksik veya geçersiz tarihler bulunuyorsa
Pandas 3’te
Örneğin:
Bu örnekte
Tarih türüne çevrilmiş sütunla tarih karşılaştırması yaparken karşılaştırılan değeri de tarih olarak oluşturun:
Bu yarı açık aralık, 1 Kasım’ı kapsar ve 1 Aralık’ı dışarıda bırakır; böylece 30 Kasım’ın saat içeren kayıtları da seçilir. Bitişi 30 Kasım gece yarısı olarak belirlemek, o günün daha sonraki saatlerini dışarıda bırakır. Filtre sonucunun boş olması, dönüşümün başarısız olduğunu tek başına kanıtlamaz; veri gerçekten belirtilen tarih aralığı dışında da olabilir. Önce
Saat dilimi içeren metinlerde veya farklı kaynaklardan gelen zaman damgalarında tüm değerlerin aynı zaman diliminde olup olmadığını ayrıca belirleyin. Yalnızca metni tarih/saat türüne çevirmek, farklı zaman dilimlerinin iş anlamını kendiliğinden düzeltmez. Tarih dönüşümü başarılı olsa bile verinin gün-ay sırası, saat dilimi ve eksik kayıtları doğru yorumladığınızı ayrıca doğrulamanız gerekir.
pd.to_datetime() kullanın. Dönüşümden sonra sütun, tarih karşılaştırma, sıralama ve tarih aralığı filtreleme işlemlerinde kullanılabilen bir tarih/saat türüne geçer. Çözünürlük pandas sürümüne ve girdinin duyarlılığına göre değişebilir; her sonuç datetime64[ns] olmak zorunda değildir. Tarih biçimi belliyse format belirtmek hatalı yorumlama riskini azaltır; bozuk değerleri nasıl ele alacağınızı ise errors parametresiyle seçebilirsiniz.Temel dönüşüm
Ön koşul olarak pandas'ın içe aktarılmış olması ve tarihlerin bulunduğu sütunun metin değerleri içermesi gerekir. Aşağıdaki örnekteki veriler varsayımsaldır:
Python:
import pandas as pd
df = pd.DataFrame({
"tarih": ["2026-11-08", "2026-11-09", "2026-11-10"],
"satis": [120, 150, 95]
})
df["tarih"] = pd.to_datetime(df["tarih"])
print(df.dtypes)
print(df["tarih"].min())
Pandas 3’te bu örneğin tür çıktısında
tarih sütunu datetime64[us] olarak görünür. Daha eski sürümlerde datetime64[ns] görülebilir; önemli olan çıktının artık tarih/saat türünde olmasıdır. min() çağrısı da artık metin sıralaması değil, tarih değerlerinin kronolojik karşılaştırması üzerinden çalışır.Bir CSV dosyasını okurken dönüşümü aynı akışta da yapabilirsiniz:
Python:
df = pd.read_csv("satislar.csv")
df["tarih"] = pd.to_datetime(df["tarih"])
Dönüşümün gerçekten yapıldığını
df.dtypes ile kontrol edin. Sütun hâlâ object görünüyorsa dönüşüm sonucu başka bir değişkene atanmış olabilir veya dönüşüm yapılan sütun beklediğiniz sütun olmayabilir.Tarih biçimi belliyse format belirtin
Gün, ay ve yıl sırasının açıkça bilindiği verilerde
format kullanın. Örneğin 08.11.2026 değeri için biçim %d.%m.%Y olur:
Python:
df["tarih"] = pd.to_datetime(
df["tarih"],
format="%d.%m.%Y"
)
Yaygın biçim belirteçleri şunlardır:
| Metin örneği | format değeri | Anlamı |
|---|---|---|
| 2026-11-08 | %Y-%m-%d | Dört haneli yıl-ay-gün |
| 08.11.2026 | %d.%m.%Y | Gün.ay.dört haneli yıl |
| 11/08/2026 | %m/%d/%Y | Ay/gün/dört haneli yıl |
| 08/11/2026 | %d/%m/%Y | Gün/ay/dört haneli yıl |
| 2026-11-08 14:30:00 | %Y-%m-%d %H:%M:%S | Tarih ve 24 saatlik saat |
%d/%m/%Y ile %m/%d/%Y aynı metin için farklı sonuç verebilir. Örneğin 03/04/2026 değeri, ilk biçimde 3 Nisan 2026; ikinci biçimde 4 Mart 2026 anlamına gelir. Bu nedenle yalnızca verinin görünüşüne bakarak biçim seçmeyin; kaynağın gün-ay mı, ay-gün mü kullandığını doğrulayın.Biçimi belirterek yapılan dönüşüm, biçime uymayan bir değer varsa hata verebilir. Bu davranış, veri kalitesindeki sorunu gizlemek istemediğiniz durumlarda yararlıdır. Dönüşümden sonra
df.dtypes çıktısında tarih sütununu yeniden kontrol edin.Hatalı tarih değerlerini yönetme
Sütunda boş, eksik veya geçersiz tarihler bulunuyorsa
errors seçeneğini kullanın. Seçenekler farklı sonuçlar üretir:| Seçenek | Sonuç | Ne zaman kullanılır? |
|---|---|---|
| raise | İlk geçersiz değerde hata verir | Veri hatasını hemen fark etmek istediğinizde |
| coerce | Geçersiz değerleri NaT yapar | Geçersiz kayıtları sonradan ayırmak istediğinizde |
errors="ignore" desteklenmez. Hatanın durdurmasını istiyorsanız raise, geçersiz tarihleri NaT olarak ayırmak istiyorsanız coerce seçin.Örneğin:
Python:
df = pd.DataFrame({
"tarih": ["08.11.2026", "gecersiz", None]
})
df["tarih"] = pd.to_datetime(
df["tarih"],
format="%d.%m.%Y",
errors="coerce"
)
print(df)
print(df["tarih"].isna())
Bu örnekte
gecersiz ve eksik değerler NaT olur. NaT, tarih sütunlarında kullanılan eksik tarih değeridir; geçersiz metnin geçerli bir tarihe dönüştüğünü kanıtlamaz. Hangi satırların sorunlu olduğunu görmek için dönüşümden önce özgün sütunu koruyabilir veya df["tarih"].isna() ile bu satırları ayırabilirsiniz.Dönüşümden sonra filtreleme ve tarih kullanımı
Tarih türüne çevrilmiş sütunla tarih karşılaştırması yaparken karşılaştırılan değeri de tarih olarak oluşturun:
Python:
baslangic = pd.Timestamp("2026-11-01")
bitis = pd.Timestamp("2026-12-01")
secili = df[
df["tarih"].between(baslangic, bitis, inclusive="left")
]
print(secili)
Bu yarı açık aralık, 1 Kasım’ı kapsar ve 1 Aralık’ı dışarıda bırakır; böylece 30 Kasım’ın saat içeren kayıtları da seçilir. Bitişi 30 Kasım gece yarısı olarak belirlemek, o günün daha sonraki saatlerini dışarıda bırakır. Filtre sonucunun boş olması, dönüşümün başarısız olduğunu tek başına kanıtlamaz; veri gerçekten belirtilen tarih aralığı dışında da olabilir. Önce
df["tarih"].min(), df["tarih"].max() ve df.dtypes değerlerini kontrol edin.Saat dilimi içeren metinlerde veya farklı kaynaklardan gelen zaman damgalarında tüm değerlerin aynı zaman diliminde olup olmadığını ayrıca belirleyin. Yalnızca metni tarih/saat türüne çevirmek, farklı zaman dilimlerinin iş anlamını kendiliğinden düzeltmez. Tarih dönüşümü başarılı olsa bile verinin gün-ay sırası, saat dilimi ve eksik kayıtları doğru yorumladığınızı ayrıca doğrulamanız gerekir.
Son düzenleme: