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

20次阅读
没有评论

共计 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")  # 时区转换 

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2024-01-19发表,共计1768字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)