4.7.1-时间序列生成与索引设置.md

4.7.1 时间序列生成与索引设置

时间序列数据是指按时间顺序排列的数据,通常用于表示金融市场数据、传感器数据、气象数据等。数据框常以时间作为行标签保存时间序列数据,便于按时间查询、切片和分析。本节核心是用 date_range() 生成规则时间序列,以及把日期列设置为数据框的行标签。

pd.date_range() 可快速生成按天、按月、按年等递增的规则时间序列,返回 DatetimeIndex。常用参数:start 指定起始日期,periods 指定周期数,freq 指定频率;课程中 D、M、Y 分别表示天、月、年。例如 dates = pd.date_range(start='2024-01-01', periods=10, freq='D') 生成从 2024-01-01 到 2024-01-10 共 10 天的日期序列。若改为 freq='M',则生成 10 个月的日期序列,且每个日期对齐到月末:2024-01-31、2024-02-29、…、2024-10-31(2024 年为闰年,故二月为 29 日)。该对象可迭代,可通过整数索引访问其中每一个元素,元素是 Timestamp 对象;按月示例中 dates[0] 为 Timestamp('2024-01-31 00:00:00')。较新版本 pandas 中,月末、年末频率分别写作 ME、YE,对齐结果与课程中的 M、Y 相同。

在时间序列处理中,通常将日期或时间列设置为索引。若该列以字符串形式存储,须先用 pd.to_datetime() 转为 datetime 格式,再通过 set_index() 设为索引。课程示例先用字符串列表 ['2024-8-1', …, '2024-8-10'] 与数量列构造数据框,此时「日期」仍是字符串;再执行:

df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)

转换后索引成为真正的时间索引,形如 2024-08-01。也可以在创建数据框时直接把 date_range() 生成的日期序列作为索引,例如 dates = pd.date_range(start='2024-08-01', periods=10, freq='D'),再 df = pd.DataFrame(num, index=dates, columns=['数量']),效果同样是以时间为行标签、以「数量」为列。

易错点:freq='M'(或 ME)对齐月末而不是月初,不要误以为从 2024-01-01 起按月就是每月 1 号;字符串日期未先 to_datetime 就 set_index,索引仍是普通标签而非 DatetimeIndex,后续按时间切片、重采样会受影响;set_index() 默认返回新数据框,未指定 inplace=True 且未赋值则原对象不变。

关键要点

下载此文件