Pandas时间序列数据处理完全指南
2025-07-05 01:52:58作者:冯爽妲Honey
时间序列数据是数据分析中最常见的数据类型之一。本文将全面介绍如何使用pandas处理时间序列数据,从基础操作到高级技巧,帮助数据分析师高效处理时间相关的数据。
数据准备
我们使用空气质量数据作为示例,包含NO₂和PM2.5的测量值。数据来自三个监测站:巴黎的FR04014、安特卫普的BETR801和伦敦的London Westminster。
import pandas as pd
import matplotlib.pyplot as plt
air_quality = pd.read_csv("data/air_quality_no2_long.csv")
air_quality = air_quality.rename(columns={"date.utc": "datetime"})
时间戳转换基础
原始数据中的日期通常是字符串格式,我们需要将其转换为pandas的Timestamp对象才能进行时间相关的操作:
air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])
转换后,datetime列变成了datetime64[ns, UTC]
类型,这是pandas的Timestamp对象,类似于Python标准库中的datetime.datetime
。
专业提示:在读取数据时就可以直接转换日期列:
pd.read_csv("data/air_quality_no2_long.csv", parse_dates=["datetime"])
时间属性提取
转换为Timestamp后,我们可以轻松提取各种时间属性:
# 提取月份
air_quality["month"] = air_quality["datetime"].dt.month
# 获取时间范围
start_date = air_quality["datetime"].min()
end_date = air_quality["datetime"].max()
time_span = end_date - start_date # 计算时间跨度
可用的时间属性包括:
- year: 年份
- month: 月份
- day: 日
- hour: 小时
- minute: 分钟
- second: 秒
- weekday: 星期几(周一为0)
- quarter: 季度
时间序列分组分析
利用时间属性可以进行高效的分组分析:
# 按星期几和地点分组计算NO₂平均值
weekday_avg = air_quality.groupby(
[air_quality["datetime"].dt.weekday, "location"]
)["value"].mean()
# 按小时计算平均值并绘制柱状图
hourly_avg = air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean()
hourly_avg.plot(kind='bar', figsize=(12, 4))
使用DatetimeIndex
将时间列设为索引可以解锁更多强大功能:
no_2 = air_quality.pivot(index="datetime", columns="location", values="value")
设置时间索引后:
- 可以直接通过索引访问时间属性:
no_2.index.year
- 支持时间范围的便捷切片:
no_2["2019-05-20":"2019-05-21"]
- 绘图时自动优化时间轴显示
时间重采样
重采样(resampling)是时间序列分析中的核心操作,可以改变数据频率:
# 按月重采样取最大值
monthly_max = no_2.resample("MS").max()
# 按日重采样取平均值并绘图
no_2.resample("D").mean().plot(style="-o", figsize=(10, 5))
常用重采样频率代码:
- "D": 每日
- "W": 每周
- "M": 每月
- "Q": 每季度
- "A": 每年
- "H": 每小时
- "T"或"min": 每分钟
- "S": 每秒
最佳实践总结
- 日期转换:尽早将日期字符串转换为Timestamp对象
- 属性提取:利用dt访问器获取丰富的时间属性
- 索引优化:将时间列设为索引以获得额外功能
- 智能切片:使用字符串直接切片时间范围
- 重采样:灵活改变数据频率满足分析需求
时间序列数据处理是数据分析的基础技能,掌握这些pandas技巧将显著提升你的工作效率和分析能力。在实际项目中,这些方法可以应用于金融数据、物联网传感器数据、日志分析等各种时间相关的数据分析场景。