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

news2025/4/21 21:17:05

目录

# 开篇

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]


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秋招突击——7/10——复习{}——新作{在排序数组中查找元素的第一个最后一个位置、搜索旋转排序数组}

文章目录 引言复习新作在排序数组中查找元素的第一个和最后一个位置个人实现参考实现 搜索旋转排序数组个人实现参考实现 总结 引言 复习 新作 在排序数组中查找元素的第一个和最后一个位置 题目链接 注意 非递减序列》元素是递增或者相等,并不是严格递增的找到…

【GreenHills】GHS-Servecode的查看和说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 在Green Hills客户申请license试用以及正式文件的Servecode编号会有不同,该文档对此进行说明并如何主动查看Servecode,并且说明Servecode的类别,通过Servecode了解客户授权情况。 …

【机器学习】初学者经典案例(随记)

🎈边走、边悟🎈迟早会好 一、概念 机器学习是一种利用数据来改进模型性能的计算方法,属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进,而不需要明确编程。 类型 监督学习:使用带标签的数据进行训练&…

慢性肾脏病-MR+转录组文献

Identification of novel therapeutic targets for chronic kidney disease and kidney function by integrating multi-omics proteome with transcriptome - PMC (nih.gov) 数据和材料 Our pQTL summary data were acquired from previously published studies and can be f…

const7配置静态网络连接

cd /etc/sysconfig/network-scripts/ //进入到network-scripts目录下 vi ifcfg-ens32 //编辑配置文件 修改文件内容 ps:因为我这里是NAT模式下的网络 子网掩码和网关就使用这里默认的 ip设置请取除子网ip 192.168.149.0 和网关192.168.149.2之外的&#xff08…

AI普及时代即将来临,我们如何提升自我竞争力?

自ChatGPT发布以来,形形色色的AI工具形同雨后春笋,令人眼花缭乱,不知所措。 许多听说过AI的人,或者使用过AI工具,如 文心一言,通义千问,ChatGPT等等也只会提一些简单的问题。那么,面…

Linux的tmp目录占用空间100%问题分析和解决

一、背景 系统运行期间,客户突然反馈上传文档传不上去。研发立马排查日志,发现日志中出现大量的“No space avaliable on disk”,下意识应用服务器磁盘满了,赶快连上服务器查看磁盘空间占用情况: 黑人问号脸&#xff…

LLM-文本分块(langchain)与向量化(阿里云DashVector)存储,嵌入LLM实践

文章目录 前言向量、令牌、嵌入分块按字符拆分按字符递归拆分按token拆分 向量化使用 TextEmbedding 实现语义搜索数据准备通过 DashScope 生成 Embedding 向量通过 DashVector 构建检索:向量入库语义检索:向量查询完整代码 总结 前言 Transformer 架构…

前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)

简述:在前端开发中,弹框和实时视频播放是常见的需求。这里来简单记录一下,如何使用Vue.js和Element UI实现一个可拖动的弹框,并在其中播放实时视频。同时,确保在拖拽弹框时,底层元素仍然可以操作。这里来记…

常用知识碎片 分页组件的使用(arco-design组件库)

目录 分页组件使用 API 组件代码示例 使用思路: 前端示例代码 html script 后端示例代码 Controller Impl xml 总结 分页组件使用 使用Arco Design之前需要配置好搭建前端环境可以看我另外一篇文章: 手把手教你 创建Vue项目并引入Arco Desi…

【JavaWeb程序设计】Servlet(二)

目录 一、改进上一篇博客Servlet(一)的第一题 1. 运行截图 2. 建表 3. 实体类 4. JSP页面 4.1 login.jsp 4.2 loginSuccess.jsp 4.3 loginFail.jsp 5. mybatis-config.xml 6. 工具类:创建SqlSessionFactory实例,进行 My…

十八.升职加薪系列-JVM垃圾回收器-开天辟地的ZGC

前言 随着Java的发展,JVM的GC垃圾回收器也在跟着升级,从早起的单线程垃圾回收器Serial,到多线程的垃圾回收器Parallel Scavenge,再到并发垃圾回收器CMS,G1等。它们在某些对延迟要求比较高的系统来说都有些力不从心,比如&#xff…

物联网系统中市电电量计量方案(一)

为什么要进行电量计量? 节约资源:电量计量可以帮助人们控制用电量,从而达到节约资源的目的。在当前严峻的资源供应形势下,节约能源是我们应该重视的问题。合理计费:电表可以帮助公共事业单位进行合理计费,…

R包:‘ggcharts好看线图包‘

介绍 ggcharts提供了一个高级{ggplot2}接口,用于创建通用图表。它的目标既简单又雄心勃勃:让您更快地从数据可视化的想法到实际的绘图。所以如何?通过处理大量的数据预处理,为您模糊{ggplot2}细节和绘图样式。生成的图是ggplot对象,可以使用…

物联网系统中市电电量计量方案(二)

上文我们主要介绍了电量计量中最重要的组成部分——电量计量芯片(如果没有阅读该文章的,可以点击这里)。本文会再为大家介绍电量计量的另外一个组成部分——电流互感器。 电流互感器的定义 电流互感器是一种可将一次侧大电流转换为二次侧小电…

Sentinel-1 Level 1数据处理的详细算法定义(三)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

室内精准定位哪个产品抗干扰能力强?可以用于哪些方面?

室内精准定位产品其实有很多,其实它是安装在室内接收型号的一个基站,并且范围有一定的限制,而被定位的人员需要携带定位产品,那么通过室内基站收集到的信息,将会通过专业的系统处理后呈现在相应的设备上,比…

Linux下常见压缩文件tar.xz、tar.bz2、tar.gz的区别和详解

文章目录 tar.xz tar.bz2 tar.gz 的区别三种文件的解压方式tar.xz的解压三种压缩文件的创建方式 tar.xz tar.bz2 tar.gz 的区别 这三个文件扩展名都表示压缩后的档案文件,但它们使用不同的压缩算法。 tar.xz: tar 代表 Tape Archive,它是一种将多个文件…

f_mkfs格式化最小分区数是191

使用fatfs的f_mkfs最小分区数是191原因: 在挂载ram_disk时参考的文章有提到: “然后是GET_SECTOR_COUNT 用于f_mkfs格式化时获取可用的sector的数量,32bit-LBA的情况下至少为191” 自己也实际试过确实要不少于191,网上也没找到相…

WMS系统的模块构成

WMS系统的模块构成通常包括以下几个主要部分: ———————————————————————————————— 1、库存管理: 主要负责管理仓库内的库存信息,包括库存记录、库存调整、库存盘点等功能。 2、入库管理: 负责处…