Pandas & NumPy Academy · Lektion

DatetimeIndex och periodintervall

Skapa ett DatetimeIndex med pd.date_range, tolka datumsträngar och ange en tidskolumn som index för tidsbaserad åtkomst.

Lektion 1 av 413 steg

DatetimeIndex och periodintervall är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Varför Pandas har särskilda tidsverktyg

Tidsseriedata kräver mer än att bara lagra datum som strängar. Du behöver sortera efter tid, välja datumintervall, sampla om till olika frekvenser och extrahera komponenter som månad och veckodag. Pandas löser detta med DatetimeIndex — ett index som består av datetime64-värden — vilket aktiverar specialiserade tidsmedvetna operationer som inte är tillgängliga för vanliga heltals- eller strängindex.

Skapa ett DatetimeIndex med pd.date_range()

pd.date_range(start, end, freq) genererar en sekvens av jämnt fördelade datum. Parametern freq anger intervallet med hjälp av offsetalias: 'D' för dag, 'h' för timme, 'ME' för månadsslut, 'W' för vecka och 'YE' för årsslut. Du kan ange antingen end eller periods (antal tidsstämplar) — inte båda.

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])

Ange ett DatetimeIndex för en DataFrame

För att aktivera tidsbaserade operationer anger Du datumkolumnen som DataFrame-objektets index med set_index() efter att ha konverterat den till datetime64 med pd.to_datetime(). När indexet är ett DatetimeIndex kan Du använda partiell strängindexering (df['2024-01']), intervallurval för datum och alla tidsmedvetna 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

Partiell strängindexering

En av de mest praktiska funktionerna i ett DatetimeIndex är partiell strängindexering. Du kan välja rader efter år, månad eller datum genom att skicka en delvis angiven datumsträng till .loc[]. Exempelvis returnerar df.loc['2024-01'] alla rader från januari 2024, och df.loc['2024'] returnerar alla rader från 2024. Du behöver inte jämföra kolumnvärden uttryckligen.

# 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() för tolkning

pd.to_datetime() konverterar strängar, heltal (Unix-tidsstämplar) eller datumkolumner med blandade format till datetime64. Ange format för att specificera det exakta mönstret om datumen har ett icke-standardiserat format (t.ex. '%d/%m/%Y'). Använd errors='coerce' för att konvertera värden som inte kan tolkas till NaT (Not a Time) i stället för att utlösa ett fel.

# 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'

.dt-accessorn för datumkomponenter

När en DataFrame-kolumn (inte indexet) innehåller datetime64-värden ger .dt-accessorn tillgång till alla datumegenskaper och metoder för kolumnvektorn på ett vektoriserat sätt. Använd den för att extrahera .dt.year, .dt.month, .dt.day, .dt.day_of_week, .dt.hour och så vidare utan loopar. Om datumvärdet finns i indexet använder Du df.index.year direkt.

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())

Periodintervall med pd.period_range()

Ett PeriodIndex representerar tidsintervall i stället för specifika tidsstämplar. pd.period_range(start, periods, freq) skapar månads-, kvartals- eller årsperioder. En period som Period('2024-01', 'M') representerar hela januari 2024, inte bara dess startdatum. PeriodIndex är användbart för ekonomisk rapportering där Du tänker i termer av kvartal eller månader.

# 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]

Konvertera mellan tidsstämpel och period

Du kan konvertera ett DatetimeIndex till ett PeriodIndex med to_period(freq) och tillbaka med to_timestamp(). Det är användbart att konvertera till perioder när Du vill märka rader med månad eller kvartal i stället för en specifik dag, eftersom gruppering och aggregering då blir mer intuitiva vid kalenderbaserad analys.

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])

Hantering av tidszoner

Tidsserier från verkligheten innehåller ofta information om tidszoner. Pandas stöder tidszonsmedvetna DatetimeIndex med tz_localize() (koppla en tidszon till naiva tidsstämplar) och tz_convert() (konvertera mellan tidszoner). Arbeta alltid internt i UTC och konvertera till lokal tid först vid visning för att undvika buggar på grund av tvetydighet vid övergångar till och från sommartid.

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])

Kontrollera och sortera DatetimeIndex

Tidsserieoperationer som resampling och urval kräver att DatetimeIndex är sorterat (monotont stigande). Kontrollera detta med df.index.is_monotonic_increasing och sortera med df.sort_index() vid behov. Ett osorterat DatetimeIndex kan orsaka tysta fel eller oväntade resultat vid resampling och fönsterfunktioner.

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)

Praktiskt mönster: skapa en DataFrame för tidsserier

Här är ett komplett mönster för att skapa en tidsindexerad DataFrame från rådata: tolka datum, ange index, sortera och verifiera indexets frekvens. Denna konfiguration är grunden för all tidsserieanalys i kommande lektioner — resampling, glidande medelvärden och förskjutna variabler bygger alla på ett rent och sorterat 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())

Snabbtest

Testa dina kunskaper om DatetimeIndex och periodintervall från den här lektionen.

Lektionssammanfattning

I den här lektionen lärde Du Dig att skapa ett DatetimeIndex med pd.date_range() och tolka datum med pd.to_datetime(), att använda partiell strängindexering för intuitivt datumurval, skillnaden mellan typerna Timestamp och Period samt hur tidszoner hanteras. Nästa steg är att utforska resampling för att ändra frekvensen i en tidsserie.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”DatetimeIndex och periodintervall” gratis?

Ja – hela texten till ”DatetimeIndex och periodintervall” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”DatetimeIndex och periodintervall”?

Skapa ett DatetimeIndex med pd.date_range, tolka datumsträngar och ange en tidskolumn som index för tidsbaserad åtkomst. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”DatetimeIndex och periodintervall”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. DatetimeIndex och periodintervall
  2. Omsampla tidsserier
  3. Förskjutningar och laggfunktioner
  4. Extrahera tidsrelaterade egenskaper
← Tillbaka till Pandas & NumPy Academy