创建时间
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") # 时区转换