Pandas & NumPy Academy · leksjon

DatetimeIndex og periodeintervaller

Opprett en DatetimeIndex med pd.date_range, tolk datestrenger, og angi en tidskolonne som indeks for tidsbasert tilgang.

Leksjon 1 av 413 trinn

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))  # DatetimeIndex

Delvis 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.

Gratis å komme i gang

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

  1. DatetimeIndex og periodeintervaller
  2. Resampling av tidsserier
  3. Forskyvning og lag-funksjoner
  4. Trekke ut tidsfunksjoner
← Tilbake til Pandas & NumPy Academy