温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用pandas处理时间序列

发布时间:2026-11-04 09:47:12 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

用 pandas 处理时间序列 是非常常见的任务,下面从「基础 → 常用操作 → 实战示例」系统讲一下。


一、把数据变成时间序列

1. 读取并指定时间列

import pandas as pd

df = pd.read_csv("data.csv", parse_dates=["time"])

2. 将某列设为时间索引

df["time"] = pd.to_datetime(df["time"])
df = df.set_index("time")

✅ 时间索引是 pandas 时间序列分析的基础


二、生成时间索引

# 按天
pd.date_range("2024-01-01", periods=10, freq="D")

# 按小时
pd.date_range("2024-01-01", periods=10, freq="H")

# 按月
pd.date_range("2024-01", periods=6, freq="M")

常用频率:

  • D 天
  • H 小时
  • T 分钟
  • W 周
  • M 月末
  • MS 月初

三、时间序列切片与筛选

1. 按年份 / 月份筛选

df["2024"]          # 2024年
df["2024-01"]       # 2024年1月

2. 时间区间切片

df["2024-01-01":"2024-01-10"]

3. 按条件筛选

df[df.index.hour == 9]

四、重采样(非常重要)

1. 降采样(高频 → 低频)

# 每天数据 → 每月均值
df.resample("M").mean()

2. 升采样(低频 → 高频)

df.resample("H").ffill()

常用方法:

  • mean()
  • sum()
  • max() / min()
  • count()

五、滚动与扩展窗口

1. 滚动均值(移动平均)

df["value"].rolling(window=7).mean()

2. 扩展窗口

df["value"].expanding().mean()

六、时间特征提取

df["year"] = df.index.year
df["month"] = df.index.month
df["weekday"] = df.index.weekday
df["hour"] = df.index.hour

七、缺失时间处理

1. 重采样补齐时间

df = df.resample("D").asfreq()

2. 缺失值填充

df.fillna(method="ffill")
df.interpolate()

八、时区处理

df = df.tz_localize("UTC")
df = df.tz_convert("Asia/Shanghai")

九、一个完整示例

import pandas as pd
import numpy as np

# 生成时间序列
idx = pd.date_range("2024-01-01", periods=100, freq="D")
data = pd.DataFrame({"value": np.random.randn(100)}, index=idx)

# 月度均值
monthly = data.resample("M").mean()

# 7天滚动均值
data["rolling_mean"] = data["value"].rolling(7).mean()

# 提取特征
data["month"] = data.index.month

十、常见坑提醒 ⚠️

  1. 时间列一定要是 datetime 类型
  2. 分析前尽量设为 时间索引
  3. resample 只能用于 DatetimeIndex

如果你有具体场景(比如股票、日志、IoT、销售数据),我可以给你更针对性的代码模板。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手