当前位置: 首页 > 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 类型# 创建包含日期字符串的数据dfpd.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(日期,inplaceTrue)print(\n设置日期索引后:)print(df)2.2 多种日期格式解析# 不同格式的日期字符串date_stringspd.Series([2024-01-01,2024/01/02,01-03-2024,2024年01月04日,Jan 5, 2024])print(原始字符串:)print(date_strings)# 自动解析多种格式parsed_datespd.to_datetime(date_strings)print(\n解析后:)print(parsed_dates)3. 生成日期范围3.1 date_range() 基础# 按天生成dailypd.date_range(start2024-01-01,end2024-01-10,freqD)print(每日日期:)print(daily)# 按小时生成hourlypd.date_range(start2024-01-01,periods10,freqH)print(\n每小时日期:)print(hourly)# 按分钟生成minutelypd.date_range(start2024-01-01 09:00:00,periods10,freqT)print(\n每分钟日期:)print(minutely)3.2 常用频率代码代码说明示例D日历日freqDB工作日freqBH小时freqHT或min分钟freqTS秒freqSW周周日freqWW-MON周一freqW-MONM月末freqMMS月初freqMSQ季末freqQQS季初freqQSA年末freqAAS年初freqAS# 工作日business_dayspd.date_range(start2024-01-01,periods10,freqB)print(工作日:)print(business_days)# 每周一mondayspd.date_range(start2024-01-01,periods10,freqW-MON)print(\n每周一:)print(mondays)# 月末month_endpd.date_range(start2024-01-01,periods6,freqM)print(\n月末:)print(month_end)# 月初month_startpd.date_range(start2024-01-01,periods6,freqMS)print(\n月初:)print(month_start)4. DatetimeIndex 属性# 创建时间序列数据datespd.date_range(2024-01-01,periods30,freqD)tspd.Series(np.random.randn(30),indexdates)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. 时间索引的选择# 创建时间序列datespd.date_range(2024-01-01,periods100,freqD)tspd.Series(np.random.randn(100),indexdates)# 按年份选择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)datespd.date_range(2024-01-01,periods200,freqD)# 模拟股价随机游走returnsnp.random.normal(0.001,0.02,200)prices100*(1returns).cumprod()stockpd.DataFrame({收盘价:prices,成交量:np.random.randint(10000,100000,200),涨跌幅:returns*100},indexdates)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_statsstock.resample(M).agg({收盘价:[mean,max,min],成交量:sum})print(monthly_stats.head())# 3. 按星期统计print(\n3. 各星期表现:)weekday_statsstock.groupby(星期)[涨跌幅].mean()print(weekday_stats)# 4. 季度收益print(\n4. 季度收益:)quarterly_returnsstock[收盘价].resample(Q).last().pct_change()*100print(quarterly_returns)7. 常见频率代码速查表代码说明别名D日历日dayB工作日businessH小时hourT分钟min,minuteS秒secondL毫秒msU微秒usW周weekM月末monthQ季末quarterA年末year8. 总结操作方法示例字符串转日期pd.to_datetime()pd.to_datetime(df[date])生成日期范围pd.date_range()pd.date_range(2024-01-01, periods10, freqD)设置日期索引df.set_index()df.set_index(date, inplaceTrue)提取年份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.gsyq.cn/news/1298975.html

相关文章:

  • AI三合一:微信团队颠覆性技术揭秘
  • 新手避坑指南:用EPSON RC+ 7.0虚拟机器人完成你的第一个项目(从安装到动起来)
  • 百度网盘解析工具实战指南:3分钟突破限速实现高速下载
  • Obsidian Excel插件:在知识管理系统中实现专业表格编辑与数据整合
  • 基于遗传算法的配电网故障重构研究【IEEE33节点】(Matlab代码实现)
  • 【独家首发】Midjourney针孔相机风格参数白皮书:基于1,842张生成图像的光学畸变量化分析(含f/1.4–f/16等效光圈映射表)
  • 智能科学与技术毕业设计题目怎么选
  • ElevenLabs希伯来文语音合成:从API调用失败到99.2%自然度达标的7步生产级优化流程
  • 基于CircuitPython与Adafruit IO的DIY智能门铃摄像头全栈开发指南
  • 如何用Photoshop图层批量导出工具提升3倍工作效率 [特殊字符]
  • WCH CH348L USB转多串口芯片实战:6路UART+2路RS485工业网关设计与电平兼容方案
  • 【负荷预测】基于LSTM-KAN的负荷预测研究(Python代码实现)
  • FreeRouting完整指南:开源PCB自动布线工具从入门到精通
  • 5个技巧让macOS窗口管理效率翻倍:DockDoor完全指南
  • 基于改进粒子群算法的盲源分离(1维信号和2维图像)附Matlab代码
  • Midjourney玩具相机风格从翻车到封神:1个--v 6.1专属参数组合+2个隐藏式胶片颗粒注入指令+1套曝光补偿校准表
  • 初创团队如何利用Taotoken以可控成本启动AI产品开发
  • 【2026考研408】考研计算机408统考历年真题及答案解析PDF电子版(2009-2026年)
  • 如何将本地新建分支关联到远程同名分支?
  • 基于超声波传感器与CircuitPython的互动音乐装置制作指南
  • 通过Taotoken用量看板清晰掌握团队API成本消耗
  • AD数据集:nuPlan、OpenScene、NAVSIM 之间的关系【原始数据(nuPlan)→ 轻量重分发(OpenScene) → 评测基准/仿真框架(NAVSIM )】
  • Lua 元表(Metatable)
  • 别再只会用LM358了!手把手教你用电压跟随器搞定嵌入式硬件中的阻抗匹配难题
  • 2026年当下,果宝农业以全产业链实力领跑酱香风味果酒赛道 - 2026年企业推荐榜
  • 如何通过Open WebUI构建企业级私有AI知识平台解决数据安全与成本控制难题
  • 3分钟快速上手:FanControl风扇控制软件终极中文配置指南
  • 3个步骤彻底解决TranslucentTB启动失败问题,让Windows任务栏透明化工具重获新生
  • 保姆级教程:用PyBullet和Stable-Baselines3搞定你的第一个机器人强化学习项目
  • Android Studio中文界面终极指南:3个步骤告别英文开发障碍