DatetimeIndex og periodeintervaller
Opprett en DatetimeIndex med pd.date_range, tolk datestrenger, og angi en tidskolonne som indeks for tidsbasert tilgang.
DatetimeIndex og periodeintervaller er en gratis leksjon i Pandas & NumPy Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Pandas & NumPy Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Hvorfor Pandas har spesialverktøy for tid
Tidsseriedata krever mer enn bare å lagre datoer som strenger. De må sorteres etter tid, De må kunne velge datointervaller, endre frekvensen og hente ut komponenter som måned og ukedag. Pandas løser dette med DatetimeIndex — en indeks som består av datetime64-verdier — og gir tilgang til spesialiserte tidsbevisste operasjoner som ikke er tilgjengelige for vanlige heltalls- eller strengindekser.
Opprette en DatetimeIndex med pd.date_range()
pd.date_range(start, end, freq) genererer en sekvens med datoer med jevne mellomrom. Parameteren freq angir intervallet ved hjelp av aliaser for forskyvninger: 'D' for dag, 'h' for time, 'ME' for slutten av måneden, 'W' for uke og 'YE' for slutten av året. De kan angi enten end eller periods (antall tidsstempler) — ikke begge.
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])Angi en DatetimeIndex for en DataFrame
For å aktivere tidsbaserte operasjoner angir De datokolonnen som DataFrame-ens indeks med set_index() etter at De har konvertert den til datetime64 med pd.to_datetime(). Når indeksen er en DatetimeIndex, kan De bruke delvis strengindeksering (df['2024-01']), utsnitt av datointervaller og alle tidsbevisste metoder.
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)) # DatetimeIndexDelvis strengindeksering
En av de mest praktiske funksjonene i en DatetimeIndex er delvis strengindeksering. De kan velge rader etter år, måned eller dato ved å sende en delvis datostreng til .loc[]. For eksempel returnerer df.loc['2024-01'] alle rader fra januar 2024, mens df.loc['2024'] returnerer alle rader fra 2024. Det er ikke nødvendig å sammenligne kolonneverdier eksplisitt.
# 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() for tolking
pd.to_datetime() konverterer strenger, heltall (Unix-tidsstempler) eller datokolonner med blandede formater til datetime64. Send inn format for å angi det nøyaktige mønsteret hvis datoene har et ikke-standardformat (for eksempel '%d/%m/%Y'). Bruk errors='coerce' for å konvertere verdier som ikke kan tolkes, til NaT (Not a Time) i stedet for å utløse en feil.
# 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'Tilgang via .dt for datokomponenter
Når en DataFrame-kolonne (ikke indeksen) inneholder datetime64-verdier, gir tilgangsobjektet .dt tilgang til alle egenskaper og metoder for dato og tid på hele kolonnevektoren. Bruk det til å hente ut .dt.year, .dt.month, .dt.day, .dt.day_of_week, .dt.hour og så videre uten løkker. Hvis datoen og tiden ligger i indeksen, bruker De df.index.year direkte.
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())Perioderanger med pd.period_range()
En PeriodIndex representerer tidsintervaller i stedet for bestemte tidsstempler. pd.period_range(start, periods, freq) oppretter månedlige, kvartalsvise eller årlige perioder. En periode som Period('2024-01', 'M') representerer hele januar 2024, ikke bare startdatoen. PeriodIndex er nyttig for økonomisk rapportering der De tenker i kvartaler eller måneder.
# 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]Konvertere mellom tidsstempel og periode
De kan konvertere en DatetimeIndex til en PeriodIndex med to_period(freq) og tilbake med to_timestamp(). Det er nyttig å konvertere til perioder når De vil merke rader med måned eller kvartal i stedet for en bestemt dag. Dette gjør gruppering og aggregering mer intuitiv i kalenderbasert analyse.
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])Håndtering av tidssoner
Tidsserier fra virkeligheten inneholder ofte informasjon om tidssone. Pandas støtter tidssonebevisste DatetimeIndex-objekter gjennom tz_localize() (knytte en tidssone til naive tidsstempler) og tz_convert() (konvertere mellom tidssoner). Arbeid alltid i UTC internt, og konverter bare til lokal tid ved visning for å unngå feil forårsaket av tvetydighet ved overgang til og fra sommertid.
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])Kontrollere og sortere DatetimeIndex
Tidsserieoperasjoner som omsampling og utsnitt krever at DatetimeIndex er sortert (monotont stigende). Kontroller dette med df.index.is_monotonic_increasing, og sorter med df.sort_index() ved behov. En usortert DatetimeIndex kan føre til feil som oppstår uten varsel, eller uventede resultater ved omsampling og vindusfunksjoner.
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)Praktisk mønster: bygge en tidsserie-DataFrame
Her er et komplett mønster for å bygge en tidsindeksert DataFrame fra rådata: tolk datoene, angi indeksen, sorter, og bekreft indeksfrekvensen. Dette oppsettet er grunnlaget for all tidsserieanalyse i senere leksjoner — omsampling, glidende gjennomsnitt og laggfunksjoner er alle avhengige av en ryddig, sortert DatetimeIndex.
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())Hurtigsjekk
Test forståelsen Deres av DatetimeIndex og perioderanger fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte De hvordan De oppretter en DatetimeIndex med pd.date_range() og tolker datoer med pd.to_datetime(), hvordan De bruker delvis strengindeksering for intuitivt datovalg, forskjellen mellom typene Timestamp og Period, og hvordan De håndterer tidssoner. Neste gang skal vi se på omsampling for å endre frekvensen til en tidsserie.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «DatetimeIndex og periodeintervaller» gratis?
Ja – hele teksten i «DatetimeIndex og periodeintervaller» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Pandas & NumPy Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «DatetimeIndex og periodeintervaller»?
Opprett en DatetimeIndex med pd.date_range, tolk datestrenger, og angi en tidskolonne som indeks for tidsbasert tilgang. Du øver på Pandas & NumPy Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Pandas & NumPy Academy?
Ingen tidligere erfaring er nødvendig. Pandas & NumPy Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «DatetimeIndex og periodeintervaller»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Pandas & NumPy Academy-leksjonen?
Ja. Alle Pandas & NumPy Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- DatetimeIndex og periodeintervaller
- Resampling av tidsserier
- Forskyvning og lag-funksjoner
- Trekke ut tidsfunksjoner