共计 1768 个字符,预计需要花费 5 分钟才能阅读完成。
创建时间
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") # 时区转换
正文完