“学习Pandas中时间序列的基本操作“
目录
# 开篇
1. 创建和操作时间序列对象
2. 时间序列数据的读取和存储
3. 时间序列数据的索引和切片
4. 时间序列数据的操作和转换
5. 时间序列数据的可视化
6. 处理时间序列中的缺失值
7. 时间序列数据的聚合和分组
8. 时间序列的时间区间和偏移量操作
示例代码:
运行结果:
# 开篇
在Python中,时间序列是一种特殊的数据类型,通常用于表示一系列按时间顺序排列的数据点。时间序列可以是一维数组,其中每个数据点都和一个特定的时间点相关联。
时间序列在数据分析和预测中非常重要,因为它们可以帮助我们理解数据随时间变化的模式和趋势。通过对时间序列数据进行分析,我们可以发现周期性变化、趋势、季节性等特征,并基于这些特征进行预测和决策。
在Python中,有许多用于处理时间序列数据的库,如pandas、numpy、matplotlib等。这些库提供了丰富的功能和工具,可以帮助我们加载、处理、可视化和分析时间序列数据。
总的来说,时间序列在Python中的作用主要包括:
- 数据分析和预测:通过对时间序列数据进行分析,可以揭示数据的模式和趋势,从而进行预测和决策。
- 可视化:通过绘制时间序列图表,可以直观地展示数据随时间的变化,帮助我们理解数据的特征和规律。
- 数据处理和转换:可以利用时间序列数据进行数据清洗、转换和处理,以便更好地进行后续的分析和建模工作。
- 特征工程:时间序列数据可以用于构建特征,帮助机器学习模型更好地理解数据和进行预测。
总的来说,时间序列在Python中是一种非常重要的数据类型,可以帮助我们更好地理解和分析数据,从而做出更准确的预测和决策。
1. 创建和操作时间序列对象
- 使用
pd.date_range、pd.to_datetime和pd.Timestamp创建时间索引。 DatetimeIndex是 Pandas 时间序列的核心。
import pandas as pd# 创建时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-06-30', freq='D')
data = pd.DataFrame(date_rng, columns=['日期'])
data.set_index('日期', inplace=True)
2. 时间序列数据的读取和存储
- 使用
read_csv、read_excel等方法读取带有日期时间数据的文件,并使用parse_dates参数进行解析。 - 保存时间序列数据到文件中,例如使用
to_csv、to_excel等。
# 读取时间序列数据
data = pd.read_csv('data.csv', parse_dates=['日期'], index_col='日期')# 保存时间序列数据
data.to_csv('output.csv')
3. 时间序列数据的索引和切片
- 基于时间索引的切片和子集选择,例如
data['2023-01-01':'2023-02-01']。 - 使用
resample方法进行重采样。
# 时间索引切片
subset = data['2023-01-01':'2023-02-01']# 重采样
monthly_data = data.resample('M').mean()
4. 时间序列数据的操作和转换
- 使用
shift、rolling和expanding方法进行移动窗口操作和滚动计算。 - 使用
diff计算差分。 - 使用
resample进行频率转换和聚合操作。
# 滚动计算
data['7天滚动平均'] = data['值'].rolling(window=7).mean()# 差分计算
data['差分'] = data['值'].diff()# 重采样聚合
weekly_data = data.resample('W').sum()
5. 时间序列数据的可视化
- 使用 ECharts(通过 pyecharts)绘制时间序列数据的图表。
from pyecharts.charts import Line
from pyecharts import options as opts# 时间序列数据的可视化
line = (Line(init_opts=opts.InitOpts(width="1000px", height="600px")) # 设置图表的宽度和高度.add_xaxis(data.index.strftime('%Y-%m-%d').tolist()).add_yaxis("每日温度", data['温度'].tolist(), is_smooth=True, label_opts=opts.LabelOpts(is_show=False)).add_yaxis("7天滚动平均", data['7天滚动平均'].tolist(), is_smooth=True, label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="温度时间序列数据",pos_top="5%",pos_left="center"),xaxis_opts=opts.AxisOpts(type_="category",axislabel_opts=opts.LabelOpts(rotate=-15) # 旋转x轴标签),yaxis_opts=opts.AxisOpts(type_="value"),tooltip_opts=opts.TooltipOpts(trigger="axis"),legend_opts=opts.LegendOpts(pos_top="10%", # 设置图例的位置pos_left="center",orient="horizontal"))
)
6. 处理时间序列中的缺失值
- 使用
fillna、interpolate和dropna方法处理缺失数据。
# 填充缺失值
data['值'].fillna(method='ffill', inplace=True)# 插值填充
data['值'].interpolate(method='linear', inplace=True)# 删除缺失值
data.dropna(inplace=True)
7. 时间序列数据的聚合和分组
- 使用
groupby和resample方法对时间序列数据进行分组和聚合。
# 按月分组聚合
monthly_grouped = data.groupby(data.index.month).sum()# 重采样聚合
quarterly_data = data.resample('Q').mean()
8. 时间序列的时间区间和偏移量操作
- 使用
pd.offsets模块中的类进行自定义时间偏移量操作。
# 自定义时间偏移量
data.index = data.index + pd.offsets.Day(1)
示例代码:
import pandas as pd
import numpy as np
from pyecharts.charts import Line
from pyecharts import options as opts# 1. 创建时间序列数据
date_rng = pd.date_range(start='2023-01-01', end='2023-06-30', freq='D')
data = pd.DataFrame(date_rng, columns=['日期'])
print("\n日期:")
print(data)
data['温度'] = np.random.randint(0, 35, size=(len(date_rng)))
print("\n温度:")
print(data)
data.set_index('日期', inplace=True)# 2. 读取和存储时间序列数据
data.to_csv('temperature_data.csv')
data = pd.read_csv('temperature_data.csv', parse_dates=['日期'], index_col='日期')# 3. 时间序列数据的索引和切片
subset = data['2023-01-01':'2023-02-01']
monthly_data = data.resample('ME').mean() # 修改 'M' 为 'ME'# 4. 时间序列数据的操作和转换
data['7天滚动平均'] = data['温度'].rolling(window=7).mean()
data['温度差分'] = data['温度'].diff()
weekly_data = data.resample('W').mean()
print("\n7天滚动平均/温度差分:")
print(data)# 5. 时间序列数据的可视化
line = (Line(init_opts=opts.InitOpts(width="1000px", height="600px")) # 设置图表的宽度和高度.add_xaxis(data.index.strftime('%Y-%m-%d').tolist()).add_yaxis("每日温度", data['温度'].tolist(), is_smooth=True, label_opts=opts.LabelOpts(is_show=False)).add_yaxis("7天滚动平均", data['7天滚动平均'].tolist(), is_smooth=True, label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="温度时间序列数据",pos_top="5%",pos_left="center"),xaxis_opts=opts.AxisOpts(type_="category",axislabel_opts=opts.LabelOpts(rotate=-15) # 旋转x轴标签),yaxis_opts=opts.AxisOpts(type_="value"),tooltip_opts=opts.TooltipOpts(trigger="axis"),legend_opts=opts.LegendOpts(pos_top="10%", # 设置图例的位置pos_left="center",orient="horizontal"))
)
line.render("temperature_time_series.html")# 6. 处理时间序列中的缺失值
data.loc['2023-02-15':'2023-02-20', '温度'] = np.nan
data.loc[:, '温度'] = data['温度'].ffill() # 使用 obj.ffill() 替换 fillna
data.loc[:, '温度'] = data['温度'].interpolate(method='linear')
print("\n处理缺失值: ")
print(data)# 7. 时间序列数据的聚合和分组
monthly_grouped = data.groupby(data.index.month).mean()
quarterly_data = data.resample('QE').mean() # 修改 'Q' 为 'QE'
print("\n月度数据:")
print(monthly_grouped)
print("\n季度数据:")
print(quarterly_data)# 8. 时间序列的时间区间和偏移量操作
data.index = data.index + pd.offsets.Day(1)
print("\n时间区间和偏移量操作:")
print(data)
运行结果:
日期:日期
0 2023-01-01
1 2023-01-02
2 2023-01-03
3 2023-01-04
4 2023-01-05
.. ...
176 2023-06-26
177 2023-06-27
178 2023-06-28
179 2023-06-29
180 2023-06-30[181 rows x 1 columns]温度:日期 温度
0 2023-01-01 25
1 2023-01-02 10
2 2023-01-03 24
3 2023-01-04 23
4 2023-01-05 17
.. ... ..
176 2023-06-26 22
177 2023-06-27 29
178 2023-06-28 6
179 2023-06-29 6
180 2023-06-30 24[181 rows x 2 columns]7天滚动平均/温度差分:温度 7天滚动平均 温度差分
日期
2023-01-01 25 NaN NaN
2023-01-02 10 NaN -15.0
2023-01-03 24 NaN 14.0
2023-01-04 23 NaN -1.0
2023-01-05 17 NaN -6.0
... .. ... ...
2023-06-26 22 21.142857 -5.0
2023-06-27 29 22.714286 7.0
2023-06-28 6 20.142857 -23.0
2023-06-29 6 19.571429 0.0
2023-06-30 24 18.285714 18.0[181 rows x 3 columns]处理缺失值: 温度 7天滚动平均 温度差分
日期
2023-01-01 25.0 NaN NaN
2023-01-02 10.0 NaN -15.0
2023-01-03 24.0 NaN 14.0
2023-01-04 23.0 NaN -1.0
2023-01-05 17.0 NaN -6.0
... ... ... ...
2023-06-26 22.0 21.142857 -5.0
2023-06-27 29.0 22.714286 7.0
2023-06-28 6.0 20.142857 -23.0
2023-06-29 6.0 19.571429 0.0
2023-06-30 24.0 18.285714 18.0[181 rows x 3 columns]月度数据:温度 7天滚动平均 温度差分
日期
1 14.290323 12.725714 -0.233333
2 22.821429 20.678571 -0.321429
3 18.419355 18.801843 0.322581
4 18.333333 17.666667 0.366667
5 17.193548 18.064516 -0.967742
6 20.500000 20.085714 0.800000季度数据:温度 7天滚动平均 温度差分
日期
2023-03-31 18.366667 17.619048 -0.067416
2023-06-30 18.659341 18.599686 0.054945时间区间和偏移量操作:温度 7天滚动平均 温度差分
日期
2023-01-02 25.0 NaN NaN
2023-01-03 10.0 NaN -15.0
2023-01-04 24.0 NaN 14.0
2023-01-05 23.0 NaN -1.0
2023-01-06 17.0 NaN -6.0
... ... ... ...
2023-06-27 22.0 21.142857 -5.0
2023-06-28 29.0 22.714286 7.0
2023-06-29 6.0 20.142857 -23.0
2023-06-30 6.0 19.571429 0.0
2023-07-01 24.0 18.285714 18.0[181 rows x 3 columns]

相关文章:
“学习Pandas中时间序列的基本操作“
目录 # 开篇 1. 创建和操作时间序列对象 2. 时间序列数据的读取和存储 3. 时间序列数据的索引和切片 4. 时间序列数据的操作和转换 5. 时间序列数据的可视化 6. 处理时间序列中的缺失值 7. 时间序列数据的聚合和分组 8. 时间序列的时间区间和偏移量操作 示例代码&…...
常用知识碎片 分页组件的使用(arco-design组件库)
目录 分页组件使用 API 组件代码示例 使用思路: 前端示例代码 html script 后端示例代码 Controller Impl xml 总结 分页组件使用 使用Arco Design之前需要配置好搭建前端环境可以看我另外一篇文章: 手把手教你 创建Vue项目并引入Arco Desi…...
WPF 制作一个文字漂浮提示框
WPF好像没有自带的文字提示漂浮,我们可以定制一个。 效果如下: xaml xaml如下: <Window x:Class"GroupServer.MsgTip"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sc…...
Node.js_fs模块
文件删除 文件重命名和移动(本质都是修改路径) 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) (打印出来是该文件夹下名称的数组形式) 读取当前的文件夹(readdir) 删除文件夹 (rmdir) 查看资源状态…...
使用 Vue 3 实现打字机效果
在现代前端开发中,添加一些视觉效果可以提升用户体验。其中,打字机效果是一种常见且吸引人的效果,可以用于展示动态文本。本文将介绍如何在 Vue 3 中实现打字机效果。 实现步骤 1. 创建自定义指令 我们首先创建一个自定义指令 v-typewriter…...
unordered_map和set
前言:本篇文章继续分享新的容器unordered_map和set。前边我们分享过map和set,其底层为红黑树,而unordered_map和set的底层则为哈希表,因此在unordered_map和set的实现中,我们可以效仿许多在map和set的中就分享过的一些…...
java:运用字节缓冲输入流将文件中的数据写到集合中
代码主要是将文本文件中的数据写到集合中,运用到的是java字节缓冲输入流的知识点。 public static void main(String[] args) throws IOException {//创建字符缓冲流输入对象BufferedReader bufferedReader new BufferedReader(new FileReader("student.txt&q…...
【机器学习】支持向量机与主成分分析在机器学习中的应用
文章目录 一、支持向量机概述什么是支持向量机?超平面和支持向量大边距直觉 二、数据预处理与可视化数据集的基本信息导入必要的库加载数据集数据概况数据可视化特征对的散点图矩阵类别分布条形图平均面积与平均光滑度的散点图变量之间的相关性热图 三、模型训练&am…...
SpringBoot项目架构实战之“网关zuul搭建“
第三章 网关zuul搭建 前言: 1、主要功能 zuul主要提供动态路由(内置ribbon实现)和过滤(可以做统一鉴权过滤器、灰度发布过滤器、黑白名单IP过滤器、服务限流过滤器(可以配合Sentinel实现))功能…...
发挥储能系统领域优势,海博思创坚定不移推动能源消费革命
随着新发展理念的深入贯彻,我国正全面落实“双碳”目标任务,通过积极转变能源消费方式,大幅提升能源利用效率,实现了以年均约3.3%的能源消费增长支撑了年均超过6%的国民经济增长。这一成就的背后,是我国能源结构的持续…...
matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法
问题场景 网上搜索matlabyalmipcplex的安装教程,跟着步骤操作即可,假如都安装好了,在matlab中测试安装是否成功,出现以下问题: 1、matlab中设置路径中添加了yalmip和cplex路径,在命令窗口中输入yalmiptest…...
C#中的Dictionary
Dictionary<TKey, TValue> 是一个泛型集合,它存储键值对(key-value pairs),其中每个键(key)都是唯一的。这个集合类提供了快速的数据插入和检索功能,因为它是基于哈希表实现的。 注意 ke…...
VSCode中多行文本的快速前后缩进
快捷键 VSCode提供了一组快捷键,用于快速调整选中文本行的缩进。 增加缩进(向前缩进):在Windows和Linux上按 Tab 键,在Mac上按 ⇧⇥(Shift Tab)。减少缩进(向后缩进)&…...
C# 8.0 新语法的学习和使用
C# 8.0 是微软在 2019 年 9 月 23 日随 .NET Core 3.0 一同发布的一个重要版本更新,带来了许多新的语言特性和改进。本文将详细介绍 C# 8.0 的新语法,并通过实际应用案例展示这些新特性的使用方法。 目录 1. 可空引用类型 2. 异步流 3. 默认接口方…...
数据结构——约瑟夫环C语言链表实现
约瑟夫环问题由古罗马史学家约瑟夫(Josephus)提出,他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”,约瑟夫则想“留得青…...
【MyBatis】——入门基础知识必会内容
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
react父调用子的方法,子调用父的方法
父调用子的方法 // 子组件 import React, { useRef, useEffect } from react;const ChildComponent ({ childMethodRef }) > {const childMethod useRef(null);useEffect(() > {childMethodRef.current childMethod;}, []);const someMethod () > {console.log(子…...
C#知识|账号管理系统:UI层-添加账号窗体设计思路及流程。
哈喽,你好啊,我是雷工! 前边练习过详情页窗体的设计思路及流程: 《C#知识|上位机UI设计-详情窗体设计思路及流程(实例)》 本节练习添加账号窗体的UI设计,以下为学习笔记。 01 效果展示 02 添加窗体 在UI层添加Windows窗体,设置名称为:FrmAddAcount.cs 设置窗体属…...
【机器学习】初学者经典案例(随记)
🎈边走、边悟🎈迟早会好 一、概念 机器学习是一种利用数据来改进模型性能的计算方法,属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进,而不需要明确编程。 类型 监督学习:使用带标签的数据进行训练&…...
进阶版智能家居系统Demo[C#]:整合AI和自动化
引言 在基础智能家居系统的基础上,我们将引入更多高级功能,包括AI驱动的自动化控制、数据分析和预测。这些进阶功能将使智能家居系统更加智能和高效。 目录 高级智能家居功能概述使用C#和AI实现智能家居自动化实现智能照明系统的高级功能 自动调节亮度…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
