当前位置: 首页 > news >正文

模块六-数据合并与连接——36. 时间序列基础

36. 时间序列基础

1. 概述

时间序列是按时间顺序排列的数据点。Pandas 提供了强大的时间序列处理功能,包括日期范围生成、时间索引、日期提取等,是金融、气象、销售等数据分析的基础。

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt# 设置中文字体plt.rcParams['font.sans-serif']=['SimHei','Arial Unicode MS']plt.rcParams['axes.unicode_minus']=False# 创建示例数据np.random.seed(42)

2. 日期时间类型

2.1 转换为 datetime 类型

# 创建包含日期字符串的数据df=pd.DataFrame({'日期':['2024-01-01','2024-01-02','2024-01-03','2024-01-04','2024-01-05'],'销售额':[100,150,120,180,200]})print("原始数据类型:")print(df.dtypes)# 转换为 datetime 类型df['日期']=pd.to_datetime(df['日期'])print("\n转换后数据类型:")print(df.dtypes)# 设置日期为索引df.set_index('日期',inplace=True)print("\n设置日期索引后:")print(df)

2.2 多种日期格式解析

# 不同格式的日期字符串date_strings=pd.Series(['2024-01-01','2024/01/02','01-03-2024','2024年01月04日','Jan 5, 2024'])print("原始字符串:")print(date_strings)# 自动解析多种格式parsed_dates=pd.to_datetime(date_strings)print("\n解析后:")print(parsed_dates)

3. 生成日期范围

3.1 date_range() 基础

# 按天生成daily=pd.date_range(start='2024-01-01',end='2024-01-10',freq='D')print("每日日期:")print(daily)# 按小时生成hourly=pd.date_range(start='2024-01-01',periods=10,freq='H')print("\n每小时日期:")print(hourly)# 按分钟生成minutely=pd.date_range(start='2024-01-01 09:00:00',periods=10,freq='T')print("\n每分钟日期:")print(minutely)

3.2 常用频率代码

代码说明示例
D日历日freq='D'
B工作日freq='B'
H小时freq='H'
Tmin分钟freq='T'
Sfreq='S'
W周(周日)freq='W'
W-MON周一freq='W-MON'
M月末freq='M'
MS月初freq='MS'
Q季末freq='Q'
QS季初freq='QS'
A年末freq='A'
AS年初freq='AS'
# 工作日business_days=pd.date_range(start='2024-01-01',periods=10,freq='B')print("工作日:")print(business_days)# 每周一mondays=pd.date_range(start='2024-01-01',periods=10,freq='W-MON')print("\n每周一:")print(mondays)# 月末month_end=pd.date_range(start='2024-01-01',periods=6,freq='M')print("\n月末:")print(month_end)# 月初month_start=pd.date_range(start='2024-01-01',periods=6,freq='MS')print("\n月初:")print(month_start)

4. DatetimeIndex 属性

# 创建时间序列数据dates=pd.date_range('2024-01-01',periods=30,freq='D')ts=pd.Series(np.random.randn(30),index=dates)print("时间序列:")print(ts.head())# 提取日期各部分print(f"\n年份:{ts.index.year}")print(f"月份:{ts.index.month}")print(f"日期:{ts.index.day}")print(f"星期几(数字):{ts.index.dayofweek}")print(f"星期几(名称):{ts.index.day_name()}")print(f"年中的第几天:{ts.index.dayofyear}")print(f"季度:{ts.index.quarter}")print(f"是否月末:{ts.index.is_month_end}")print(f"是否月初:{ts.index.is_month_start}")

5. 时间索引的选择

# 创建时间序列dates=pd.date_range('2024-01-01',periods=100,freq='D')ts=pd.Series(np.random.randn(100),index=dates)# 按年份选择print("2024年数据:")print(ts['2024'])# 按年月选择print("\n2024年1月数据:")print(ts['2024-01'])# 按日期范围选择print("\n2024-01-15 到 2024-01-20:")print(ts['2024-01-15':'2024-01-20'])# 按年份范围选择print("\n2024年第一季度:")print(ts['2024-01':'2024-03'])

6. 完整示例:股票价格分析

# 创建股票价格数据np.random.seed(42)dates=pd.date_range('2024-01-01',periods=200,freq='D')# 模拟股价(随机游走)returns=np.random.normal(0.001,0.02,200)prices=100*(1+returns).cumprod()stock=pd.DataFrame({'收盘价':prices,'成交量':np.random.randint(10000,100000,200),'涨跌幅':returns*100},index=dates)print("="*60)print("股票价格分析")print("="*60)print("\n原始数据:")print(stock.head())print(f"数据周期:{stock.index[0]}{stock.index[-1]}")# 1. 提取时间特征stock['年份']=stock.index.year stock['月份']=stock.index.month stock['星期']=stock.index.day_name()stock['季度']=stock.index.quarterprint("\n1. 添加时间特征:")print(stock.head())# 2. 按月统计print("\n2. 月度统计:")monthly_stats=stock.resample('M').agg({'收盘价':['mean','max','min'],'成交量':'sum'})print(monthly_stats.head())# 3. 按星期统计print("\n3. 各星期表现:")weekday_stats=stock.groupby('星期')['涨跌幅'].mean()print(weekday_stats)# 4. 季度收益print("\n4. 季度收益:")quarterly_returns=stock['收盘价'].resample('Q').last().pct_change()*100print(quarterly_returns)

7. 常见频率代码速查表

代码说明别名
D日历日'day'
B工作日'business'
H小时'hour'
T分钟'min','minute'
S'second'
L毫秒'ms'
U微秒'us'
W'week'
M月末'month'
Q季末'quarter'
A年末'year'

8. 总结

操作方法示例
字符串转日期pd.to_datetime()pd.to_datetime(df['date'])
生成日期范围pd.date_range()pd.date_range('2024-01-01', periods=10, freq='D')
设置日期索引df.set_index()df.set_index('date', inplace=True)
提取年份dt.yeardf.index.year
提取月份dt.monthdf.index.month
提取星期dt.day_name()df.index.day_name()
按年份选择df['2024']ts['2024']
按年月选择df['2024-01']ts['2024-01']
按范围选择df['start':'end']ts['2024-01-01':'2024-01-31']

http://www.jsqmd.com/news/831494/

相关文章:

  • ESP-NOW协议与CircuitPython实战:构建低功耗物联网无线通信网络
  • CircuitPython FancyLED库:专业级可寻址LED色彩动画开发指南
  • 避坑指南:在Python 3.7环境用ModelScope部署speech_campplus_sv_zh-cn_16k-common语音识别模型的完整流程
  • 异步分页架构:解决海量数据分页性能瓶颈的现代方案
  • 用Python+MediaPipe+OpenCV做个手势识别小游戏(附完整源码)
  • Midjourney Mud印相实战手册(含12组高保真历史文物级Mud Prompt库+对应seed校验表)
  • 物联网轻量级通信协议AMTP-OpenClaw:为嵌入式设备打造高效通信桥梁
  • K210实战:三种高效部署kmodel模型至TF卡的进阶方案
  • 终极GitHub加速指南:如何将下载速度从KB/s提升到MB/s
  • 紧急更新!MJ v6.1新增--style raw对表现主义的影响深度解析(附6种失效场景急救方案)
  • 充电桩人机交互方案:大彩串口屏的选型、设计与稳定性实战
  • 多智能体协作强化学习:基于自然语言通信的SALT-NLP项目解析
  • Svelte动态光标实现:状态驱动与Spring动画的交互设计
  • 蓝桥杯EDA赛题深度解析:从客观题看电子设计核心考点
  • 基于ESP32与WLED打造智能可穿戴LED箭头帽:从硬件选型到音乐同步
  • 基于NOAC芯片的复古游戏掌机DIY:从硬件原理到工程实践
  • AD21编译报错“contains floating input pins”?别慌,手把手教你修改元件库电气属性搞定它
  • Gempy实战:如何将地质剖面图与Matplotlib/VTK结合,做出炫酷的3D可视化成果?
  • 【Midjourney胶片摄影风格终极指南】:20年影像工程师亲授7种不可外传的参数组合与暗房逻辑复刻法
  • uni-app 开发实践:精选uni-admin 基础框架技术解析与集成指南
  • 如何通过Open WebUI构建企业级私有AI知识平台解决数据安全与成本控制难题
  • 铁银印相风格商业授权避雷指南:从版权归属、输出介质到NFT铸币的7项法律与技术红线
  • 2026年5月国内人力资源外包公司推荐:五家专业评测帮你解决招聘难痛点 - 品牌推荐
  • 【负荷预测】基于LSTM-KAN的负荷预测研究(Python代码实现)
  • 如何快速搭建机器学习实战环境:面向初学者的完整指南
  • 基于Adafruit Gemma与NeoPixel打造低成本声光互动架子鼓
  • 拆解GoTenna:剖析蓝牙与Sub-1GHz射频混合通信硬件设计
  • 基于Arduino与APA102 LED的智能光影艺术盒制作全解析
  • 开发者技能管理工具 ansari-skill:从数据化到可视化实战指南
  • BepInEx:5个步骤轻松实现Unity游戏插件开发,让游戏焕然一新![特殊字符]