0Pricing
Pandas & NumPy Academy · Ders

Tarihleri Doğru Ayrıştırma

Tarih dizelerini pd.to_datetime ile datetime64 türüne ayrıştırın, birden çok biçimi yönetin ve DatetimeIndex oluşturun.

Tarihleri Doğru Ayrıştırma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

Tarih Ayrıştırma Neden Önemlidir

Tarih ve saat verileri gerçek dünyadaki veri kümelerinde her yerde karşınıza çıkar: işlem zaman damgaları, doğum tarihleri, olay günlükleri ve finansal dönemler. Tarihler dize olarak (object veri türünde) depolandığında süre hesaplayamaz, aylara göre yeniden örnekleyemez veya kronolojik olarak sıralayamazsınız. Dizeleri Pandas'ın datetime64 veri türüne dönüştürmek, zaman serisi API'sinin tamamını kullanıma açar ve zamansal analizi mümkün kılar.

import pandas as pd

df = pd.DataFrame({'date': ['2024-01-15', '2024-03-20', '2024-07-04']})
print(df['date'].dtype)  # object

# You cannot do arithmetic on string dates
# df['date'] + pd.Timedelta('1 day')  # TypeError!

# After parsing:
df['date'] = pd.to_datetime(df['date'])
print(df['date'].dtype)        # datetime64[ns]
print(df['date'] + pd.Timedelta('1 day'))

pd.to_datetime() Temelleri

pd.to_datetime(series), dize sütunlarını datetime64'e dönüştürmek için kullanılan temel işlevdir. Bir biçim dizesi belirtmenizi gerektirmeden yaygın tarih biçimlerinin çoğunu (ISO 8601, ABD tarihi, Avrupa tarihi) otomatik olarak tanıyacak kadar akıllıdır. Sonuç, datetime64[ns] veri türüne sahip bir Series olur; bu tür nanosaniye hassasiyeti sunar ve 1677 ile 2262 arasındaki zaman damgalarını depolayabilir.

import pandas as pd

dates = pd.Series([
    '2024-01-15',
    '15/01/2024',
    'January 15, 2024',
    '2024-01-15 08:30:00'
])

parsed = pd.to_datetime(dates)
print(parsed)
# 0   2024-01-15 00:00:00
# 1   2024-01-15 00:00:00
# 2   2024-01-15 00:00:00
# 3   2024-01-15 08:30:00
print(parsed.dtype)  # datetime64[ns]

format= Bağımsız Değerini Belirtme

Otomatik çıkarım çok yavaş veya belirsiz olduğunda (örneğin '01-02-03' 2 Ocak 2003, 1 Şubat 2003 ya da 3 Şubat 2001 anlamına gelebilir), Python'ın strftime kodlarını kullanarak tam biçim dizesini sağlayın. Bu yöntem ayrıca önemli ölçüde daha hızlıdır: büyük veri kümelerinde açık biçimle ayrıştırma, otomatik çıkarımdan 10 kat daha hızlı olabilir; çünkü Pandas'ın birden fazla kalıbı denemesine gerek kalmaz.

import pandas as pd

dates = pd.Series(['15/01/2024', '20/03/2024', '04/07/2024'])

# Explicit format: day/month/year
parsed = pd.to_datetime(dates, format='%d/%m/%Y')
print(parsed)
# 0   2024-01-15
# 1   2024-03-20
# 2   2024-07-04

# Common format codes:
# %Y = 4-digit year, %y = 2-digit year
# %m = month (01-12), %d = day (01-31)
# %H = hour (0-23), %M = minute, %S = second

Hatalı Tarihler için errors='coerce'

Gerçek veri kümelerinde tarih sütunlarında çoğu zaman yazım hataları veya 'TBD', 'N/A' ya da '99/99/9999' gibi yer tutucu dizeler bulunur. errors='coerce' parametresini geçirmek, pd.to_datetime() işlevine ayrıştırılamayan değerleri bir istisna oluşturmak yerine NaT değerine (Not a Time — datetime türündeki NaN karşılığı) dönüştürmesini söyler. Böylece hatalı tarihleri ayrı olarak belirleyip işleyebilirsiniz.

import pandas as pd

dates = pd.Series(['2024-01-15', 'TBD', '2024-07-04', 'N/A'])

parsed = pd.to_datetime(dates, errors='coerce')
print(parsed)
# 0   2024-01-15
# 1          NaT
# 2   2024-07-04
# 3          NaT

# Detect bad dates
print('Bad date rows:', parsed.isna().sum())  # 2

read_csv() içinde parse_dates

Tarihleri ayrıştırmak için en verimli yer, pd.read_csv() işlevinin parse_dates parametresini kullanarak yükleme aşamasıdır. Tarih olarak ayrıştırılması gereken sütun adlarının (veya dizinlerinin) listesini geçirin. Bu yaklaşım, ayrı bir son işleme adımını ortadan kaldırır ve Pandas işlemi CSV ayrıştırmasının C düzeyinde gerçekleştirdiği için çoğu zaman daha hızlıdır.

import pandas as pd
import io

csv_data = '''order_id,order_date,ship_date
1,2024-01-15,2024-01-18
2,2024-02-20,2024-02-22
'''

df = pd.read_csv(
    io.StringIO(csv_data),
    parse_dates=['order_date', 'ship_date']
)
print(df.dtypes)
# order_id      int64
# order_date    datetime64[ns]
# ship_date     datetime64[ns]

Tarih Bileşenleri için .dt Erişimcisi

Bir sütun datetime64 veri türüne sahip olduğunda, .dt erişimcisi onlarca özelliği ve yöntemi kullanıma açar. .dt.year, .dt.month, .dt.day, .dt.hour, .dt.dayofweek (0=Pazartesi) ve .dt.is_month_end değerlerini çıkarabilirsiniz. Bunlar, zaman serisi tahminlerinde özellik mühendisliği yapmak ve verileri zaman aralıklarına göre gruplamak için kullanılır.

import pandas as pd

df = pd.DataFrame({
    'event_time': pd.to_datetime([
        '2024-03-15 08:30:00',
        '2024-07-04 14:00:00',
        '2024-12-25 09:00:00'
    ])
})

df['year'] = df['event_time'].dt.year
df['month'] = df['event_time'].dt.month
df['day_of_week'] = df['event_time'].dt.day_name()
df['hour'] = df['event_time'].dt.hour
print(df[['year', 'month', 'day_of_week', 'hour']])

DatetimeIndex Ayarlama

Zaman serisi analizi için datetime sütununu DataFrame'in index'i olarak ayarlamak standart bir uygulamadır. DatetimeIndex ile zamana dayalı dilimleme (df['2024'], df['2024-01':'2024-06']) yapabilir, herhangi bir sıklığa göre yeniden örnekleyebilir ve Pandas'ın zaman serisi API'sinin tamamına erişebilirsiniz. set_index() kullanın veya read_csv içinde index_col parametresini geçin.

import pandas as pd

df = pd.DataFrame({
    'date': pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03']),
    'temp': [22.5, 23.0, 21.8]
})

df = df.set_index('date')
print(df)
#             temp
# date
# 2024-01-01  22.5
# 2024-01-02  23.0
# 2024-01-03  21.8

# Time-based slicing
print(df['2024-01-02':'2024-01-03'])

Birden Çok Tarih Biçimini İşleme

Bir tarih sütunu biçimlerin bir karışımını içeriyorsa (örneğin bazı satırlarda ISO tarihleri, bazılarında ABD biçimindeki tarihler varsa) tek bir biçim dizesi belirtemezsiniz. Satır satır biçim algılamaya izin vermek için format='mixed' (Pandas 2.0+) geçirin veya pd.to_datetime() çağrısından önce tüm tarihleri tek bir biçimde standartlaştırmak için sütunu normal ifadeyle önceden temizleyin.

import pandas as pd

mixed_dates = pd.Series([
    '2024-01-15',
    '03/20/2024',
    '2024-07-04T10:30:00'
])

# format='mixed' handles different formats row-by-row (Pandas >= 2.0)
parsed = pd.to_datetime(mixed_dates, format='mixed')
print(parsed)
# 0   2024-01-15 00:00:00
# 1   2024-03-20 00:00:00
# 2   2024-07-04 10:30:00

Saat Dilimi Bilgili Datetime Değerleri

Gerçek dünyadaki zaman damgaları çoğu zaman saat dilimi bilgisiyle birlikte gelir. pd.to_datetime(), UTC farkı içeren dizeleri (örneğin '2024-01-15 08:30:00+05:30') ayrıştırabilir ve bunları saat dilimi bilgili datetime64 olarak depolayabilir. Tüm zaman damgalarını doğru karşılaştırma ve aritmetik işlemler için ortak bir saat dilimine standartlaştırmak üzere .dt.tz_convert('UTC') kullanın.

import pandas as pd

dates = pd.to_datetime(['2024-01-15 08:30:00+05:30', '2024-01-15 10:00:00-08:00'])
print(dates)
# DatetimeIndex(['2024-01-15 08:30:00+05:30', '2024-01-15 10:00:00-08:00'])

# Convert both to UTC for fair comparison
utc_dates = dates.tz_convert('UTC')
print(utc_dates)
# DatetimeIndex(['2024-01-15 03:00:00+00:00', '2024-01-15 18:00:00+00:00'])

Tarih Farklarını Hesaplama

İki datetime64 sütunu arasındaki aritmetik işlem bir Timedelta Series üretir. Bir Timedelta değerindeki gün, saat veya saniye sayısını .dt.days, .dt.seconds ve .dt.total_seconds() özelliklerini kullanarak çıkarabilirsiniz. Yaş, süre veya son olaydan bu yana geçen gün sayısı gibi özellikleri hesaplamanın standart yolu budur.

import pandas as pd

df = pd.DataFrame({
    'start': pd.to_datetime(['2024-01-01', '2024-03-10', '2024-06-15']),
    'end': pd.to_datetime(['2024-01-20', '2024-04-05', '2024-06-30'])
})

df['duration_days'] = (df['end'] - df['start']).dt.days
print(df[['start', 'end', 'duration_days']])
#        start        end  duration_days
# 0 2024-01-01 2024-01-20             19
# 1 2024-03-10 2024-04-05             26
# 2 2024-06-15 2024-06-30             15

Tarih Oluşturmak için pd.date_range()

pd.date_range(start, end, freq=), eşit aralıklarla yerleştirilmiş tarih dizisini DatetimeIndex olarak oluşturur. Bu özellik, verilerinizi yeniden dizinleyebileceğiniz eksiksiz bir zaman omurgası oluşturmak için kullanışlıdır; böylece o gün hiç olay gerçekleşmemiş olsa bile her takvim dönemi çıktınızda yer alır. Yaygın freq değerleri: 'D' (günlük), 'ME' (ay sonu), 'h' (saatlik).

import pandas as pd

# Weekly dates for the first quarter of 2024
weekly = pd.date_range(start='2024-01-01', end='2024-03-31', freq='W')
print(weekly[:5])
# DatetimeIndex(['2024-01-07', '2024-01-14', '2024-01-21', '2024-01-28', '2024-02-04'])

# Monthly date spine
monthly = pd.date_range(start='2024-01', periods=12, freq='ME')
print(len(monthly), monthly[0], monthly[-1])
# 12 2024-01-31 2024-12-31

Kısa Kontrol

Pandas'ta tarihleri doğru şekilde ayrıştırma konusundaki anlayışınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: pd.to_datetime(), dize sütunlarını datetime64'e dönüştürür; format=, hız ve doğruluk için tam kalıbı belirtir; errors='coerce' ise hatalı tarihleri uygulamanın çökmesine neden olmak yerine NaT değerine dönüştürür. .dt erişimcisi yıl, ay, gün ve diğer bileşenleri çıkarır; DatetimeIndex ayarlamak da zamana dayalı dilimlemeyi mümkün kılar. Sırada vektörleştirilmiş dize işlemleri için .str erişimcisini inceleyeceğiz.

Sıkça Sorulan Sorular

“Tarihleri Doğru Ayrıştırma” dersi ücretsiz mi?

Evet — “Tarihleri Doğru Ayrıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Tarihleri Doğru Ayrıştırma” dersinde ne öğreneceğim?

Tarih dizelerini pd.to_datetime ile datetime64 türüne ayrıştırın, birden çok biçimi yönetin ve DatetimeIndex oluşturun. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Tarihleri Doğru Ayrıştırma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Sütun Veri Türlerini İnceleme
  2. astype() ile Tür Dönüştürme
  3. Kategorik Veri Türü
  4. Tarihleri Doğru Ayrıştırma
← Pandas & NumPy Academy Sayfasına Dön