12.2024 | pandas | python | analiza dat
Pandas oferuje zaawansowane narzędzia do pracy z datami i czasem, które są niezbędne w analizie danych czasowych. W tym przewodniku przedstawimy kompleksowe podejście do pracy z datami w pandas.
import pandas as pd
from datetime import datetime
# Pojedyncza data
date = pd.Timestamp('2024-01-01')
# Serie dat
dates = pd.date_range('2024-01-01', periods=5, freq='D')
# Własny format daty
custom_date = pd.to_datetime('01/01/2024', format='%d/%m/%Y')
# Dzienny zakres dat
daily_dates = pd.date_range('2024-01-01', '2024-12-31', freq='D')
# Miesięczny zakres dat
monthly_dates = pd.date_range('2024-01-01', '2024-12-31', freq='M')
# Zakres dat biznesowych (bez weekendów)
business_dates = pd.date_range('2024-01-01', '2024-12-31', freq='B')
# Podstawowa konwersja
df['data'] = pd.to_datetime(df['data'])
# Konwersja z obsługą błędów
df['data'] = pd.to_datetime(df['data'], errors='coerce')
# Konwersja z określonym formatem
df['data'] = pd.to_datetime(df['data'], format='%Y-%m-%d')
# Konwersja z różnymi formatami
df['data'] = pd.to_datetime(df['data'], infer_datetime_format=True)
# Konwersja z uwzględnieniem strefy czasowej
df['data'] = pd.to_datetime(df['data'], utc=True)
# Konwersja epoki Unix
df['data'] = pd.to_datetime(df['unix_timestamp'], unit='s')
# Zakładamy, że mamy kolumnę 'data' typu datetime
df['rok'] = df['data'].dt.year
df['miesiąc'] = df['data'].dt.month
df['dzień'] = df['data'].dt.day
df['dzień_tygodnia'] = df['data'].dt.day_name()
df['kwartał'] = df['data'].dt.quarter
df['tydzień_roku'] = df['data'].dt.isocalendar().week
# Dodawanie dni
df['nowa_data'] = df['data'] + pd.Timedelta(days=7)
# Odejmowanie dat
df['różnica_dni'] = (df['data2'] - df['data1']).dt.days
# Przesunięcie o miesiąc
df['następny_miesiąc'] = df['data'] + pd.DateOffset(months=1)
# Znajdowanie najbliższego dnia biznesowego
df['najbliższy_biznesowy'] = df['data'].dt.floor('B')
# Obliczanie różnicy w dniach biznesowych
df['dni_biznesowe'] = pd.bdate_range(start=df['data1'].min(),
end=df['data2'].max()).size
# Przesunięcie do końca miesiąca
df['koniec_miesiąca'] = df['data'].dt.to_period('M').dt.to_timestamp('M')
# Agregacja miesięczna
monthly_data = df.resample('M', on='data').mean()
# Agregacja tygodniowa
weekly_data = df.resample('W', on='data').sum()
# Agregacja dzienna z własną funkcją
daily_data = df.resample('D', on='data').agg({
'sprzedaż': 'sum',
'średnia_cena': 'mean',
'transakcje': 'count'
})
# Średnia krocząca
df['średnia_7d'] = df['wartość'].rolling('7D', on='data').mean()
# Suma kumulacyjna
df['suma_narastająco'] = df.groupby(df['data'].dt.year)['wartość'].cumsum()
# Zmiana procentowa
df['zmiana_%'] = df.groupby(df['data'].dt.month)['wartość'].pct_change() * 100
# Średnia wartość według miesiąca
seasonal_analysis = df.groupby(df['data'].dt.month)['wartość'].mean()
# Średnia wartość według dnia tygodnia
weekday_analysis = df.groupby(df['data'].dt.day_name())['wartość'].mean()
# Analiza trendu rocznego
yearly_trend = df.groupby(df['data'].dt.year)['wartość'].agg(['mean', 'min', 'max'])
# Znajdowanie dni z największą wartością w każdym miesiącu
monthly_peaks = df.resample('M', on='data')['wartość'].idxmax()
# Dni z wartościami odstającymi
outlier_days = df[df['wartość'] > df['wartość'].quantile(0.95)]['data']
# Dni z największym wzrostem
high_growth_days = df[df['zmiana_%'] > 10]['data']
errors='coerce'
do obsługi nieprawidłowych dat# Rozwiązanie: użyj infer_datetime_format
df['data'] = pd.to_datetime(df['data'], infer_datetime_format=True)
# Rozwiązanie: uzupełnij brakujące daty
df = df.resample('D', on='data').asfreq()
# Rozwiązanie: standaryzacja do UTC
df['data'] = df['data'].dt.tz_convert('UTC')
Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.
Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.
Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.
Jestem współtwórcą grupy Hexe Capital SA.
Zapraszam do lektury i współpracy.
Krzysztof Surowiecki
Chcę porozmawiać o współpracy →Moje certyfikaty