“学习Pandas中时间序列的基本操作“

目录

# 开篇

1. 创建和操作时间序列对象

2. 时间序列数据的读取和存储

3. 时间序列数据的索引和切片

4. 时间序列数据的操作和转换

5. 时间序列数据的可视化

6. 处理时间序列中的缺失值

7. 时间序列数据的聚合和分组

8. 时间序列的时间区间和偏移量操作

示例代码:

运行结果:


# 开篇

        在Python中,时间序列是一种特殊的数据类型,通常用于表示一系列按时间顺序排列的数据点。时间序列可以是一维数组,其中每个数据点都和一个特定的时间点相关联。

时间序列在数据分析和预测中非常重要,因为它们可以帮助我们理解数据随时间变化的模式和趋势。通过对时间序列数据进行分析,我们可以发现周期性变化、趋势、季节性等特征,并基于这些特征进行预测和决策。

        在Python中,有许多用于处理时间序列数据的库,如pandas、numpy、matplotlib等。这些库提供了丰富的功能和工具,可以帮助我们加载、处理、可视化和分析时间序列数据。

总的来说,时间序列在Python中的作用主要包括:

  1. 数据分析和预测:通过对时间序列数据进行分析,可以揭示数据的模式和趋势,从而进行预测和决策。
  2. 可视化:通过绘制时间序列图表,可以直观地展示数据随时间的变化,帮助我们理解数据的特征和规律。
  3. 数据处理和转换:可以利用时间序列数据进行数据清洗、转换和处理,以便更好地进行后续的分析和建模工作。
  4. 特征工程:时间序列数据可以用于构建特征,帮助机器学习模型更好地理解数据和进行预测。

        总的来说,时间序列在Python中是一种非常重要的数据类型,可以帮助我们更好地理解和分析数据,从而做出更准确的预测和决策。

1. 创建和操作时间序列对象

  • 使用 pd.date_rangepd.to_datetimepd.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_csvread_excel 等方法读取带有日期时间数据的文件,并使用 parse_dates 参数进行解析。
  • 保存时间序列数据到文件中,例如使用 to_csvto_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. 时间序列数据的操作和转换

  • 使用 shiftrollingexpanding 方法进行移动窗口操作和滚动计算。
  • 使用 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. 处理时间序列中的缺失值

  • 使用 fillnainterpolatedropna 方法处理缺失数据。
# 填充缺失值
data['值'].fillna(method='ffill', inplace=True)

# 插值填充
data['值'].interpolate(method='linear', inplace=True)

# 删除缺失值
data.dropna(inplace=True)

7. 时间序列数据的聚合和分组

  • 使用 groupbyresample 方法对时间序列数据进行分组和聚合。
# 按月分组聚合
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]


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重要文件放u盘还是硬盘?硬盘和u盘哪个适合长期存储

在数字时代,我们每天都会处理大量的文件。其中,不乏一些对我们而言至关重要的文件,如家庭照片、工作文档、财务记录等。面对这些重要文件的存储问题,我们通常会面临:“重要文件放U盘还是硬盘”、“硬盘和U盘哪个适合长…

qt creator中右边的的类和对象如何显示出来

qt creator中右边的的类和对象如何显示出来? 解决方法: 鼠标右键,重置为默认布局。

特征值究竟体现了矩阵的什么特征?

特征值究竟体现了矩阵的什么特征? 简单来说就是x经过矩阵A映射后和自己平行 希尔伯特第一次提出eigenvalue,这里的eigen就是自己的。所以eigenvalue也称作本征值 特征值和特征向量刻画了矩阵变换空间的特征 对平面上的任意向量可以如法炮制,把他在特征…

【Linux】任务管理

这个任务管理(job control)是用在bash环境下的,也就是说:【当我们登录系统获取bashshell之后,在单一终端下同时执行多个任务的操作管理】。 举例来说,我们在登录bash后,可以一边复制文件、一边查…

Linux--线程ID封装管理原生线程

目录 1.线程的tid(本质是线程属性集合的起始虚拟地址) 1.1pthread库中线程的tid是什么? 1.2理解库 1.3phtread库中做了什么? 1.4线程的tid,和内核中的lwp 1.5线程的局部存储 2.封装管理原生线程库 1.线程的tid…

8.9分王者“水刊”!1区IEEE-Trans,国人主编坐镇!发文量2倍增长,扩刊趋势明显!

关注GZH【欧亚科睿学术】,第一时间了解最新期刊动态! 本期,小编给大家推荐的是一本IEEE旗下王者“水刊”。该期刊目前处于扩刊状态,接收跨学科领域,领域认可度高,还可选择非OA模式无需版面费,是…

css看见彩虹,吃定彩虹

css彩虹 .f111 {width: 200px;height: 200px;border-radius: 50%;box-shadow: 0 0 0 5px inset red, 0 0 0 10px inset orange, 0 0 0 15px inset yellow, 0 0 0 20px inset lime, 0 0 0 25px inset aqua, 0 0 0 30px inset blue, 0 0 0 35px inset magenta;clip-path: polygo…

力扣爆刷第163天之TOP100五连刷81-85(回文链表、路径和、最长重复子数组)

力扣爆刷第163天之TOP100五连刷81-85(回文链表、路径和、最长重复子数组) 文章目录 力扣爆刷第163天之TOP100五连刷81-85(回文链表、路径和、最长重复子数组)一、234. 回文链表二、112. 路径总和三、169. 多数元素四、662. 二叉树…

盲人出行好帮手:蝙蝠避障让走路变简单

在一片无光的世界里,每一步都承载着探索与勇气。我是众多盲人中的一员,每天的出行不仅是从A点到B点的物理移动,更是一场心灵的征程。我的世界,虽然被剥夺了视觉的馈赠,却因科技的力量而变得宽广…

保护企业数据资产的策略与实践:数据安全治理技术之实战篇!

在上篇文章中,我们深入讨论了数据安全治理技术的前期准备工作,包括从建立数据安全运维体系、敏感数据识别、数据的分类与分级到身份认等方面的详细规划和设计。这些准备工作是实现数据安全治理的基础,它们为企业建立起一套系统化、标准化的数…

2.电容(常见元器件及电路基础知识)

一.电容种类 1.固态电容 这种一般价格贵一些,ESR,ESL比较低,之前项目400W电源用的就是这个,温升能够很好的控制 2.铝电解电容 这种一般很便宜,ESR,ESL相对大一些,一般发热量比较大,烫手。 这种一般比上一个贵一点&am…

[leetcode]maximum-binary-tree 最大二叉树

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return construct(nums, 0, nums.size() - 1);}TreeNode* construct(const vector<int>& nums, int left, int right) {if …

快速掌握 ==== js 正则表达式

git 地址 https://gitee.com/childe-jia/reg-test.git 背景 在日常开发中&#xff0c;我们经常会遇到使用正则表达式的场景&#xff0c;比如一些常见的表单校验&#xff0c;会让你匹配用户输入的手机号或者身份信息是否规范&#xff0c;这就可以用正则表达式去匹配。相信大多数…

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展&#xff0c;CSS3 为我们提供了丰富的动画效果&#xff0c;使得网页设计更加生动和有趣。今天&#xff0c;我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观&#xff0c;而且可以应用于各种网页元素&#xff0c;比如加载指示器或…

收集路径下的html并写到根目录index.html

我们可以用简单的脚本生成一个简单的导航页。 用于查看当前路径下所有的html。 #!/bin/bash index_root"/root/test/" cd ${index_root} echo "" > index.htmlecho "<html><head><title>Test Report Index</title></…

VBA 批量发送邮件

1. 布局 2. 代码 前期绑定的话&#xff0c;需要勾选 Microsoft Outlook 16.0 Object Library Option ExplicitConst SEND_Y As String "Yes" Const SEND_N As String "No" Const SEND_SELECT_ALL As String "Select All" Const SEND_CANCEL…

VSCode升级后不能打开在MacOS系统上

VSCode 在MacOS无法打开 版本 VSCode version: 1.91.0 (x64) 错误信息&#xff1a; MacBook-Pro ~ % /Users/mac/Downloads/FirefoxDownloads/Visual\ Studio\ Code.app/Contents/MacOS/Electron ; exit; [0710/142747.971951:ERROR:crash_report_database_mac.mm(753)] op…

网络建设与运维23国赛网络运维正式赛题解析

竞赛环境请看主页&#xff01; 23国赛网络运维 任务描述&#xff1a;某集团公司在更新设备后&#xff0c;路由之间无法正常通信&#xff0c;请修 复网络达到正常通信。 &#xff08;1&#xff09; 请在server1“管理员”下拉菜单中选择“镜像”选项卡&#xff0c;点 击 “创…

浪潮天启防火墙TQ2000远程配置方法SSL-xxx、L2xx 配置方法

前言 本次设置只针对配置VXX&#xff0c;其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行Vxx配置。 其他配置可参考&#xff1a;浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号&#xff0…

扫描全能王AIGC“黑科技”亮相WAIC,《人民日报》、央视、新华社同时“点赞”

2024年世界人工智能大会&#xff08;WAIC&#xff09;于近期圆满闭幕。今年&#xff0c;合合信息旗下扫描全能王展台成为大会的“网红”&#xff0c;以AI古籍修复为代表的体验项目不仅赢得了专业观众的赞誉&#xff0c;也获得了包括CCTV-4、CCTV-13、《人民日报》、新华社、解放…