String pendek seperti "D", "W", dan "ME" adalah bahasa kecil yang dipakai bersama oleh date_range(), resample(), dan rolling berbasis waktu seperti rolling("7D"). Memahami alias ini berarti memahami cara pandas menuliskan “setiap hari”, “setiap minggu”, atau “setiap akhir bulan” dalam satu string. Chapter ini memetakan alias yang paling sering dipakai pada pandas 3.0, mencoba date_range() dengan kombinasi argumen start, end, dan periods, lalu mengenal period_range() untuk data yang sudah diringkas per periode. Beberapa alias lama seperti "M" akan kita buktikan sendiri sudah tidak diterima.

Alias Inti: D, W, ME, dan YE #

Baris 4 mencetak date_range dengan freq="D" dan repr-nya memperlihatkan tiga informasi sekaligus: isi tanggal, dtype='datetime64[us]', dan freq='D'. Baris 7-9 memakai tiga alias harian-ke-tahunan: "W" menghasilkan tanggal-tanggal Minggu (mingguan ter-anchored di hari Minggu), "ME" menghasilkan akhir bulan, dan "YE" menghasilkan akhir tahun. Perhatikan bahwa "W" tidak menghasilkan 1 Januari melainkan 4 Januari — alias mingguan menempel pada hari anchor-nya, bukan pada tanggal mulai yang kita berikan.

python
import pandas as pd

# Alias harian D dan repr lengkap date_range
print(pd.date_range("2026-01-01", periods=3, freq="D"))

# W ter-anchored di hari Minggu, ME di akhir bulan, YE di akhir tahun
print(pd.date_range("2026-01-01", periods=3, freq="W").strftime("%Y-%m-%d").tolist())
print(pd.date_range("2026-01-01", periods=3, freq="ME").strftime("%Y-%m-%d").tolist())
print(pd.date_range("2026-01-01", periods=2, freq="YE").strftime("%Y-%m-%d").tolist())

# Anchor minggu bisa diarahkan ke hari lain, misalnya Senin (W-MON)
print(pd.date_range("2026-01-01", periods=3, freq="W-MON").strftime("%Y-%m-%d").tolist())

# Unit lebih halus: jam (h), menit (min), detik (s)
print(pd.date_range("2026-01-01", periods=3, freq="h").strftime("%H:%M:%S").tolist())
print(pd.date_range("2026-01-01", periods=3, freq="min").strftime("%H:%M:%S").tolist())
print(pd.date_range("2026-01-01", periods=3, freq="s").strftime("%H:%M:%S").tolist())

# Unit lebih besar: kuartal (QE)
print(pd.date_range("2026-01-01", periods=2, freq="QE").strftime("%Y-%m-%d").tolist())

# Business day (B): Sabtu dan Minggu dilewati
print(pd.date_range("2026-01-01", periods=5, freq="B").strftime("%Y-%m-%d").tolist())

# start + end tanpa periods: jumlah langkah mengikuti frekuensi
print("\nJumlah hari 1-7 Januari:", len(pd.date_range("2026-01-01", "2026-01-07", freq="D")))

# Alias lama "M" sudah tidak didukung di pandas 3.0
try:
    pd.date_range("2026-01-01", periods=2, freq="M")
except ValueError as exc:
    print("\nValueError:", str(exc))

# PeriodIndex untuk data yang sudah diringkas per periode
print()
print(pd.period_range("2026-01", periods=3, freq="M"))

Output yang Dihasilkan:

text
DatetimeIndex(['2026-01-01', '2026-01-02', '2026-01-03'], dtype='datetime64[us]', freq='D')
['2026-01-04', '2026-01-11', '2026-01-18']
['2026-01-31', '2026-02-28', '2026-03-31']
['2026-12-31', '2027-12-31']
['2026-01-05', '2026-01-12', '2026-01-19']
['00:00:00', '01:00:00', '02:00:00']
['00:00:00', '00:01:00', '00:02:00']
['00:00:00', '00:00:01', '00:00:02']
['2026-03-31', '2026-06-30']
['2026-01-01', '2026-01-02', '2026-01-05', '2026-01-06', '2026-01-07']

Jumlah hari 1-7 Januari: 7

ValueError: Invalid frequency: M. Failed to parse with error message: ValueError("'M' is no longer supported for offsets. Please use 'ME' instead.")

PeriodIndex(['2026-01', '2026-02', '2026-03'], dtype='period[M]')

Mari kita telaah bagian-bagian penting skrip di atas:

  1. Baris 4: alias "D" membuat tiga tanggal berurutan dengan freq='D' pada repr.
  2. Baris 7-12: alias "W", "ME", "YE", dan variasi anchor "W-MON"; hasilnya berupa list string tanggal agar ringkas.
  3. Baris 15-17: unit halus "h", "min", dan "s" untuk jam, menit, detik.
  4. Baris 20-23: "QE" untuk akhir kuartal dan "B" untuk hari kerja.
  5. Baris 26: date_range tanpa periods menghitung sendiri jumlah langkah dari start, end, dan freq.
  6. Baris 29-36: percobaan alias "M" dibungkus try/except, lalu period_range membuat PeriodIndex bulanan.

Mengarahkan Anchor dan Memakai Unit Halus #

Alias mingguan menerima akhiran hari: "W-MON" pada baris 12 menghasilkan tanggal-tanggal Senin, berguna ketika siklus mingguan perusahaan berpusat pada hari Senin. Unit lebih halus ditulis huruf kecil: "h" untuk jam, "min" untuk menit, dan "s" untuk detik — perhatikan bahwa "s" huruf kecil, karena "S" besar tidak dikenali pandas 3.0. Untuk kalender bisnis, alias "B" (business day) melewati Sabtu dan Minggu, sehingga lima langkah dari Kamis 1 Januari berakhir di Rabu 7 Januari. Tabel berikut merangkum alias yang muncul di output:

AliasArtiKeluaran dari 1 Januari 2026
Dharian2026-01-01, 2026-01-02, 2026-01-03
Wmingguan (anchor Minggu)2026-01-04, 2026-01-11, 2026-01-18
W-MONmingguan (anchor Senin)2026-01-05, 2026-01-12, 2026-01-19
MEakhir bulan2026-01-31, 2026-02-28, 2026-03-31
QEakhir kuartal2026-03-31, 2026-06-30
YEakhir tahun2026-12-31, 2027-12-31
Bhari kerja2026-01-01 sampai 2026-01-07, lewat akhir pekan
htiap jam00:00:00, 01:00:00, 02:00:00
mintiap menit00:00:00, 00:01:00, 00:02:00
stiap detik00:00:00, 00:00:01, 00:00:02

Rentang dengan start, end, dan periods #

date_range() menerima dua dari tiga argumen start, end, dan periods; pandas menghitung sisa informasinya dari freq. Baris 26 memberi start dan end tanpa periods, dan hasilnya 7 tanggal (1-7 Januari) karena frekuensinya harian — batas ikut dihitung. Memberikan periods=90 seperti pada dataset kita membuat deret berhenti setelah 90 langkah tanpa perlu tahu tanggal akhirnya. Pola dua-dari-tiga ini berlaku sama untuk period_range().

Periode dengan period_range #

Baris 36 membuat pd.period_range("2026-01", periods=3, freq="M") yang menghasilkan PeriodIndex berisi 2026-01, 2026-02, 2026-03. Perbedaannya dengan DatetimeIndex: Timestamp menandai satu titik waktu, sedangkan Period menandai satu rentang (bulan penuh, kuartal penuh). Perhatikan bahwa untuk Period, alias bulan tetap "M" tanpa akhiran E — perubahan ME hanya berlaku pada offset berbasis Timestamp. PeriodIndex lazim dipakai setelah data harian diringkas per periode, misalnya sebagai index hasil agregasi bulanan.

Dokumentasi resmi yang relevan: pandas.date_range , pandas.period_range , dan User Guide: Time series .

Deret harian kita masih terasa bergerigi: penjualan Senin selalu lebih rendah daripada Minggu. Chapter berikutnya memperkenalkan rolling() untuk menghaluskan gerigi tersebut dengan statistik bergerak.