0Pricing
Pandas & NumPy Academy · Pelajaran

DatetimeIndex dan Rentang Periode

Buat DatetimeIndex dengan pd.date_range, urai tanggal string, dan tetapkan kolom waktu sebagai indeks untuk akses berbasis waktu.

DatetimeIndex dan Rentang Periode adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Mengapa Pandas Memiliki Alat Waktu Khusus

Data deret waktu memerlukan lebih dari sekadar menyimpan tanggal sebagai string. Anda perlu mengurutkan berdasarkan waktu, memilih rentang tanggal, melakukan pengambilan sampel ulang ke frekuensi yang berbeda, serta mengekstrak komponen seperti bulan dan hari dalam minggu. Pandas menyediakan kemampuan ini melalui DatetimeIndex — indeks yang terdiri dari nilai datetime64 — yang membuka operasi khusus berbasis waktu yang tidak tersedia pada indeks bilangan bulat atau string biasa.

Membuat DatetimeIndex dengan pd.date_range()

pd.date_range(start, end, freq) menghasilkan rangkaian tanggal dengan jarak yang sama. Parameter freq menentukan interval menggunakan alias offset: 'D' untuk hari, 'h' untuk jam, 'ME' untuk akhir bulan, 'W' untuk minggu, dan 'YE' untuk akhir tahun. Anda dapat memberikan end atau periods (jumlah stempel waktu) — bukan keduanya.

import pandas as pd

# Daily dates for January 2024
dates = pd.date_range(start='2024-01-01', end='2024-01-07', freq='D')
print(dates)
# DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03',
#                '2024-01-04', '2024-01-05', '2024-01-06', '2024-01-07'],
#               dtype='datetime64[ns]', freq='D')

# 12 month-end dates
months = pd.date_range(start='2024-01-31', periods=12, freq='ME')
print(months[:3])

Menetapkan DatetimeIndex pada DataFrame

Untuk mengaktifkan operasi berbasis waktu, tetapkan kolom tanggal sebagai indeks DataFrame menggunakan set_index() setelah mengonversinya menjadi datetime64 dengan pd.to_datetime(). Setelah indeks menjadi DatetimeIndex, Anda dapat menggunakan pengindeksan string parsial (df['2024-01']), pemotongan rentang tanggal, dan semua metode berbasis waktu.

df = pd.DataFrame({
    'date':  ['2024-01-01', '2024-01-02', '2024-01-03'],
    'value': [10, 15, 12]
})

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
print(df)
#             value
# date
# 2024-01-01     10
# 2024-01-02     15
# 2024-01-03     12
print(type(df.index))  # DatetimeIndex

Pengindeksan String Parsial

Salah satu fitur DatetimeIndex yang paling praktis adalah pengindeksan string parsial. Anda dapat memilih baris berdasarkan tahun, bulan, atau tanggal dengan memberikan string tanggal parsial ke .loc[]. Misalnya, df.loc['2024-01'] mengembalikan semua baris dari Januari 2024, sedangkan df.loc['2024'] mengembalikan semua baris dari tahun 2024. Anda tidak perlu membandingkan nilai kolom secara eksplisit.

# Create a larger date-indexed Series
s = pd.Series(
    range(365),
    index=pd.date_range('2024-01-01', periods=365, freq='D')
)

# Select all of January 2024
print(s.loc['2024-01'].shape)  # (31,)

# Select a specific date range
print(s.loc['2024-03-01':'2024-03-07'])

pd.to_datetime() untuk Penguraian

pd.to_datetime() mengonversi string, bilangan bulat (stempel waktu Unix), atau kolom tanggal dengan format campuran menjadi datetime64. Berikan format untuk menentukan pola yang tepat jika tanggal menggunakan format nonstandar (misalnya, '%d/%m/%Y'). Gunakan errors='coerce' untuk mengonversi nilai yang tidak dapat diuraikan menjadi NaT (Bukan Waktu) alih-alih memunculkan kesalahan.

# Parse standard ISO format
print(pd.to_datetime('2024-06-15'))

# Parse non-standard format
print(pd.to_datetime('15/06/2024', format='%d/%m/%Y'))

# Handle mixed/bad data gracefully
mixed = pd.to_datetime(['2024-01-01', 'bad_date', '2024-06-15'],
                       errors='coerce')
print(mixed)  # NaT for 'bad_date'

Akses .dt untuk Komponen Datetime

Saat kolom DataFrame (bukan indeks) berisi nilai datetime64, pengakses .dt menyediakan semua properti dan metode datetime pada vektor kolom tersebut secara vektorial. Gunakan pengakses ini untuk mengekstrak .dt.year, .dt.month, .dt.day, .dt.day_of_week, .dt.hour, dan sebagainya tanpa perulangan. Jika datetime merupakan indeks, gunakan langsung df.index.year.

df_col = pd.DataFrame({'date': pd.date_range('2024-01-01', periods=5, freq='D'),
                       'value': [10, 15, 12, 18, 14]})

df_col['year']  = df_col['date'].dt.year
df_col['month'] = df_col['date'].dt.month
df_col['dow']   = df_col['date'].dt.day_of_week  # 0=Monday
df_col['week']  = df_col['date'].dt.isocalendar().week
print(df_col.head())

Rentang Periode dengan pd.period_range()

PeriodIndex merepresentasikan interval waktu, bukan stempel waktu tertentu. pd.period_range(start, periods, freq) membuat periode bulanan, triwulanan, atau tahunan. Periode seperti Period('2024-01', 'M') merepresentasikan seluruh bulan Januari 2024, bukan hanya tanggal awalnya. PeriodIndex berguna untuk pelaporan fiskal ketika Anda berpikir dalam satuan kuartal atau bulan.

# Monthly periods
periods = pd.period_range('2024-01', periods=6, freq='M')
print(periods)
# PeriodIndex(['2024-01', '2024-02', '2024-03',
#              '2024-04', '2024-05', '2024-06'],
#             dtype='period[M]')

# Quarterly periods
quarters = pd.period_range('2024Q1', periods=4, freq='Q')
print(quarters)  # [2024Q1, 2024Q2, 2024Q3, 2024Q4]

Mengonversi antara Timestamp dan Period

Anda dapat mengonversi DatetimeIndex menjadi PeriodIndex dengan to_period(freq) dan mengembalikannya dengan to_timestamp(). Konversi ke periode berguna ketika Anda ingin memberi label pada baris berdasarkan bulan atau kuartal, bukan berdasarkan hari tertentu, sehingga pengelompokan dan agregasi menjadi lebih intuitif untuk analisis berbasis kalender.

daily_idx = pd.date_range('2024-01-15', periods=5, freq='D')
print('DatetimeIndex:', daily_idx[:3])

# Convert to monthly periods
monthly_idx = daily_idx.to_period('M')
print('PeriodIndex:', monthly_idx[:3])
# PeriodIndex(['2024-01', '2024-01', ...], dtype='period[M]')

# Convert back to timestamps (start of period)
print(monthly_idx.to_timestamp()[:3])

Penanganan Zona Waktu

Deret waktu di dunia nyata sering kali disertai informasi zona waktu. Pandas mendukung DatetimeIndex yang mengenali zona waktu melalui tz_localize() (menetapkan zona waktu ke stempel waktu naif) dan tz_convert() (mengonversi antarzona waktu). Selalu gunakan UTC secara internal dan konversikan ke waktu lokal hanya untuk tampilan, guna menghindari kesalahan akibat ambiguitas waktu musim panas.

naive = pd.date_range('2024-01-01', periods=3, freq='D')
print('Naive:', naive.tz)

# Attach timezone (localize)
utc = naive.tz_localize('UTC')
print('UTC:', utc)

# Convert to New York time
ny = utc.tz_convert('America/New_York')
print('NY:', ny[:2])

Memeriksa dan Mengurutkan DatetimeIndex

Operasi deret waktu seperti pengambilan sampel ulang dan pemotongan mengharuskan DatetimeIndex diurutkan (meningkat secara monoton). Periksa dengan df.index.is_monotonic_increasing dan urutkan dengan df.sort_index() jika diperlukan. DatetimeIndex yang tidak terurut dapat menyebabkan kesalahan yang tidak terlihat atau hasil yang tidak terduga dalam pengambilan sampel ulang dan fungsi jendela.

import numpy as np

df_unsorted = pd.DataFrame(
    {'value': [10, 15, 12]},
    index=pd.to_datetime(['2024-01-03', '2024-01-01', '2024-01-02'])
)
print('Sorted:', df_unsorted.index.is_monotonic_increasing)  # False

df_sorted = df_unsorted.sort_index()
print('After sort:', df_sorted.index.is_monotonic_increasing)  # True
print(df_sorted)

Pola Praktis: Membuat DataFrame Deret Waktu

Berikut pola lengkap untuk membuat DataFrame berindeks waktu dari data mentah: uraikan tanggal, tetapkan indeks, urutkan, lalu verifikasi frekuensi indeks. Persiapan ini menjadi dasar bagi semua analisis deret waktu dalam pelajaran berikutnya — rata-rata bergulir dan fitur jeda semuanya bergantung pada DatetimeIndex yang bersih dan terurut.

import numpy as np

# Simulate loading raw data
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=30, freq='D')
df_ts = pd.DataFrame({'sales': np.random.randint(100, 500, 30)}, index=dates)

df_ts.index.name = 'date'
print('Shape:', df_ts.shape)
print('Freq:', df_ts.index.freq)
print('Sorted:', df_ts.index.is_monotonic_increasing)
print(df_ts.head())

Pemeriksaan Singkat

Uji pemahaman Anda tentang DatetimeIndex dan rentang periode dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari cara membuat DatetimeIndex dengan pd.date_range() dan menguraikan tanggal dengan pd.to_datetime(), cara menggunakan pengindeksan string parsial untuk memilih tanggal secara intuitif, perbedaan antara jenis Timestamp dan Period, serta cara menangani zona waktu. Selanjutnya, kita akan mempelajari pengambilan sampel ulang untuk mengubah frekuensi deret waktu.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “DatetimeIndex dan Rentang Periode” gratis?

Ya — teks lengkap “DatetimeIndex dan Rentang Periode” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “DatetimeIndex dan Rentang Periode”?

Buat DatetimeIndex dengan pd.date_range, urai tanggal string, dan tetapkan kolom waktu sebagai indeks untuk akses berbasis waktu. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “DatetimeIndex dan Rentang Periode” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. DatetimeIndex dan Rentang Periode
  2. Pengambilan Sampel Ulang Deret Waktu
  3. Pergeseran dan Fitur Jeda
  4. Mengekstrak Fitur Temporal
← Kembali ke Pandas & NumPy Academy