DatetimeIndex dan Julat Tempoh
Cipta DatetimeIndex dengan pd.date_range, hurai tarikh rentetan dan tetapkan lajur masa sebagai indeks untuk capaian berasaskan masa.
DatetimeIndex dan Julat Tempoh ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Mengapa Pandas Mempunyai Alat Masa Khas
Data siri masa memerlukan lebih daripada sekadar menyimpan tarikh sebagai rentetan. Anda perlu mengisih mengikut masa, memilih julat tarikh, membuat pensampelan semula kepada kekerapan yang berbeza, dan mengekstrak komponen seperti bulan dan hari minggu. Pandas menangani perkara ini melalui DatetimeIndex — indeks yang terdiri daripada nilai datetime64 — yang membolehkan operasi khusus berasaskan masa yang tidak tersedia pada indeks integer atau rentetan biasa.
Mencipta DatetimeIndex dengan pd.date_range()
pd.date_range(start, end, freq) menjana urutan tarikh yang mempunyai jarak sekata. Parameter freq menentukan selang menggunakan alias ofset: 'D' untuk hari, 'h' untuk jam, 'ME' untuk penghujung bulan, 'W' untuk minggu dan 'YE' untuk penghujung tahun. Anda boleh memberikan sama ada end atau periods (bilangan cap masa) — bukan kedua-duanya.
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 membolehkan operasi berasaskan masa, tetapkan lajur tarikh sebagai indeks DataFrame menggunakan set_index() selepas menukarnya kepada datetime64 dengan pd.to_datetime(). Setelah indeks menjadi DatetimeIndex, anda boleh menggunakan pengindeksan rentetan separa (df['2024-01']), penghirisan julat tarikh dan semua kaedah yang peka terhadap masa.
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)) # DatetimeIndexPengindeksan Rentetan Separa
Salah satu ciri DatetimeIndex yang paling mudah digunakan ialah pengindeksan rentetan separa. Anda boleh memilih baris mengikut tahun, bulan atau tarikh dengan memberikan rentetan tarikh separa kepada .loc[]. Contohnya, df.loc['2024-01'] mengembalikan semua baris dari Januari 2024, manakala df.loc['2024'] mengembalikan semua baris dari tahun 2024. Anda tidak perlu membandingkan nilai lajur secara jelas.
# 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 Menghuraikan Tarikh
pd.to_datetime() menukar rentetan, integer (cap masa Unix) atau lajur tarikh dengan format bercampur kepada datetime64. Berikan format untuk menentukan corak tepat jika tarikh menggunakan format bukan standard (contohnya, '%d/%m/%Y'). Gunakan errors='coerce' untuk menukar nilai yang tidak boleh dihuraikan kepada NaT (Bukan Masa) dan bukannya menghasilkan ralat.
# 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'Pengakses .dt untuk Komponen Datetime
Apabila lajur DataFrame (bukan indeks) mengandungi nilai datetime64, pengakses .dt mendedahkan semua sifat dan kaedah datetime pada vektor lajur tersebut secara vektor. Gunakannya untuk mengekstrak .dt.year, .dt.month, .dt.day, .dt.day_of_week, .dt.hour dan sebagainya tanpa gelung. Jika datetime ialah indeks, gunakan df.index.year secara terus.
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())Julat Tempoh dengan pd.period_range()
PeriodIndex mewakili selang masa dan bukannya cap masa tertentu. pd.period_range(start, periods, freq) mencipta tempoh bulanan, suku tahunan atau tahunan. Tempoh seperti Period('2024-01', 'M') mewakili keseluruhan bulan Januari 2024, bukan sekadar tarikh mulanya. PeriodIndex berguna untuk pelaporan fiskal apabila anda berfikir berdasarkan suku tahun 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]Menukar Antara Cap Masa dan Tempoh
Anda boleh menukar DatetimeIndex kepada PeriodIndex dengan to_period(freq) dan menukarnya kembali dengan to_timestamp(). Penukaran kepada tempoh berguna apabila anda mahu melabel baris mengikut bulan atau suku tahun, bukannya mengikut hari tertentu. Hal ini menjadikan pengelompokan dan pengagregatan lebih intuitif untuk analisis berasaskan kalendar.
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])Pengendalian Zon Waktu
Siri masa dunia sebenar selalunya disertakan maklumat zon waktu. Pandas menyokong DatetimeIndex yang peka terhadap zon waktu melalui tz_localize() (melampirkan zon waktu pada cap masa tanpa zon) dan tz_convert() (menukar antara zon waktu). Sentiasa bekerja dalam UTC secara dalaman dan tukar kepada waktu tempatan hanya untuk paparan bagi mengelakkan pepijat kekeliruan akibat 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])Menyemak dan Mengisih DatetimeIndex
Operasi siri masa seperti pensampelan semula dan penghirisan memerlukan DatetimeIndex diisih (meningkat secara monoton). Semak dengan df.index.is_monotonic_increasing dan isih dengan df.sort_index() jika perlu. DatetimeIndex yang tidak diisih boleh menyebabkan ralat senyap atau hasil yang tidak dijangka dalam pensampelan semula dan fungsi tetingkap.
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)Corak Praktikal: Membina DataFrame Siri Masa
Berikut ialah corak lengkap untuk membina DataFrame berindeks masa daripada data mentah: huraikan tarikh, tetapkan indeks, isih dan sahkan kekerapan indeks. Persediaan ini menjadi asas bagi semua analisis siri masa dalam pelajaran seterusnya — pensampelan semula, purata bergerak dan ciri susulan semuanya bergantung pada DatetimeIndex yang bersih dan diisih.
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())Semakan Pantas
Uji pemahaman anda tentang DatetimeIndex dan julat tempoh daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari cara mencipta DatetimeIndex dengan pd.date_range() dan menghuraikan tarikh dengan pd.to_datetime(), cara menggunakan pengindeksan rentetan separa untuk pemilihan tarikh yang intuitif, perbezaan antara jenis Timestamp dan Period, serta cara mengendalikan zon waktu. Seterusnya, kita akan meneroka pensampelan semula untuk mengubah kekerapan siri masa.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “DatetimeIndex dan Julat Tempoh” percuma?
Ya — teks penuh “DatetimeIndex dan Julat Tempoh” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “DatetimeIndex dan Julat Tempoh”?
Cipta DatetimeIndex dengan pd.date_range, hurai tarikh rentetan dan tetapkan lajur masa sebagai indeks untuk capaian berasaskan masa. Anda berlatih Pandas & NumPy Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pandas & NumPy Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “DatetimeIndex dan Julat Tempoh” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- DatetimeIndex dan Julat Tempoh
- Pensampelan Semula Siri Masa
- Anjakan dan Ciri Lengah
- Mengekstrak Ciri Temporal