Python数据分析模块pandas之时间序列

编程 · 01-19 · 230 人浏览

创建时间

import pandas as pd
import numpy as np

print(pd.Timestamp("2024-2-2"))  # 时刻数据
print(pd.Period("2024-2-2", freq="M"))  # 时期数据,YMD分别是年月日

index = pd.date_range("2024-2-2", periods=4, freq="D")
index = pd.period_range("2024-2-2", periods=4, freq="D")

s = pd.Series(np.random.randint(0, 10, size=4), index=index)
print(s)

时间转换

print(pd.to_datetime("2024-1-1"))
print(pd.to_datetime(["2024-1-1", "2024-2-2"]))
dt = pd.to_datetime(1689965251, unit="s")  # 时间戳 -> 时间
print(dt + pd.DateOffset(hour=6))  # +6小时,hour=-6 -6小时

索引切片

index = pd.date_range("2024-2-2", periods=100, freq="D")
ts = pd.Series(range(len(index)), index=index)
print(ts["2024-2-2"])  # 索引
print(ts["2024-2"])  # 2月份
print(ts["2024"])  # 年
print(ts.index)
print(ts.index.year)  # 年,月 month,日 day,星期几 dayofweek

print(ts["2024-3-3":"2024-3-5"])  # 切片

移动和频率

时间移动:

index = pd.date_range("2024-2-2", periods=365, freq="D")
ts = pd.Series(np.random.randint(0, 100, len(index)), index=index)
print(ts.shift(periods=2))  # 默认后移1位,periods=2后移2位,负数是前移

频率转换:

print(ts.asfreq(pd.tseries.offsets.Week()))  # 天 -> 星期,月初 MonthBegin,月末 MonthEnd
print(ts.asfreq(pd.tseries.offsets.Hour(), fill_value=0))  # 天 -> 小时,由少变多可用fill_value填充空值

重采样

根据日期维度进行数据聚合,秒S,分钟T,小时H,天D,周W,月M,年Y。

index = pd.date_range("2024-2-2", periods=365, freq="D")
ts = pd.Series(np.random.randint(0, 100, len(index)), index=index)
print(ts.resample("3D").sum())  # 以3天为单位进行汇总求和
print(ts.resample("M").sum().cumsum())  # 以月为单位进行汇总求和,再累加

df = pd.DataFrame(
    {
        "price": [1, 2, 55, 48, 5],
        "score": [6, 5, 88, 14, 2],
        "week": pd.date_range("2024-1-5", periods=5, freq="W"),
    }
)
print(df.resample("M", on="week").sum())
print(df.resample("M", on="week").agg({"price": np.mean, "score": np.sum}))

时区

import pytz
print(pytz.common_timezones)  # 常用时区

index = pd.date_range("2024-2-2", periods=10, freq="D")
ts = pd.Series(np.random.randint(0, 100, len(index)), index=index)
ts = ts.tz_localize(tz="UTC")  # 设置时区
ts = ts.tz_convert(tz="Asia/Shanghai")  # 时区转换
Python
Theme Jasmine by Kent Liao