“学习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]

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

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

相关文章

算法训练营day28--134. 加油站 +135. 分发糖果+860.柠檬水找零+406.根据身高重建队列

一、 134. 加油站 题目链接:https://leetcode.cn/problems/gas-station/ 文章讲解:https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html 视频讲解:https://www.bilibili.com/video/BV1jA411r7WX 1.1 初见思路 得模拟分析出…

如何抓取和处理天气网站数据

目的 在进行气象研究时,获取准确的历史天气数据是至关重要的。本文将分享如何从天气网站收集数据并将其转化为表格形式,以便于后续分析。然而,在直接抓取数据时,可能会遇到API接口保护的问题。本文将详细解释解决这些问题的步骤&…

“Pandas数据处理与分析:实用技巧与应用“

目录 # 开篇 1. pandas的series的了解 1.1 pd.Series 创建 1.2 pd.series 的索引使用 1.3 pd.series 之字典/索引 1.4 pandas 转换数据类型 1.5 pandas 通过索引或者通过位置来取值 1.6 pandas 指定行取值 1.7 pands之Series 切片和索引 1.8 pands之Series 的索引和值…

Python基础教学之三:函数与模块篇——实现代码重用和模块化

Python基础教学之三:函数与模块篇——实现代码重用和模块化 一、函数的定义与使用 1. 理解函数 函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码块。它可以提高代码的重用性和程序的清晰度。 你可以定义一个由自己想要功能的函数,以下是…

交易伦敦银系统,听说高手都有一套

成功的伦敦银交易者都有一套自己的交易系统,这个系统为他们提供了一个明确的、可重复的决策框架,无论白银市场如何波动,他们都能按照既定的规则和策略进行操作,避免了情绪化决策和随意交易——这样的一致性有助于减少错误和亏损&a…

Androd 12 (MTK)修改屏幕物理分辨率Physical Size

1.需求说明 Android目前显示分辨率为480*800,立项表中像素为720*1280。请修改屏幕分辨率到指定大小。 2.思路分析 如果从手机修改对应的分辨率,必须自上而下的进行修改分为两个层面进行修改。 1.驱动底层 2.软件上层 3.结局方法与相关说明 查看当…

安全防御---防火墙实验1

安全防御—防火墙实验1 一、实验拓扑与要求 要求: 1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 …

企业注册商标步骤

企业注册商标:详细步骤与关键要点 在当今商业环境中,商标已成为企业品牌建设和市场竞争中不可或缺的一部分。它不仅是企业身份的象征,也是企业知识产权的重要组成部分。 一、确定注册商标的商品项目 首先,企业需要明确需要注册商…

【游戏引擎之路】登神长阶(七)——x86汇编学习:凡做难事,必有所得

5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D数学基础》。 6月13日-6月20日:攻克《3D图形教程》。 6月21日-6月22日:攻克《Raycasting游戏教程》。 6月23日-7月1日:攻克《Windows游戏编程大师技巧》。 7月…

Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件

设备文件: 屏幕(标准输出设备) fmt.Println()往标准输出设备写内容 键盘(标准输入设备) fmt.Scan()从标准输入设备读取内容 磁盘文件,放在存储设备上的文件 文本文件:以记事本打开,能看到内容(不是乱码) 二进制文件:以记事本打开…

微信右上角的“+”号,竟然能做这些事?90%的人不知道

微信,作为一款集社交、支付、娱乐于一体的超级应用,它的每一次更新都吸引着亿万用户的目光。 在微信的众多功能中,右上角的""号图标看似普通,实则隐藏着许多不为人知的实用技巧。本文将从四个方面深入挖掘这些隐秘功能…

打包时提示:Missing Gradle Project Information.或者在加载gradle时出错

1.Android打包弹出错误提示框:missing gradle project information. please check if the IDE successfully synchronized its state with the Gradble project model. 2.加载gradle出错:修复报错后 File -> Sync Project with Gradle Files

用JavaScript将 NCR(Numeric Character Reference)标记转换为对应字符的方法

0 &#xff0c 、&#11111……是什么鬼&#xff1f; 最近&#xff0c;要将一些网页内容复制到<textarea>文本框中作进一步处理&#xff0c;发现有些网页内容中包含&#xff0c或之类的标记&#xff0c;会被原样复制到<textarea>文本框中。 如果将这些网页内容直…

Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)

这次比赛也是比较吃亏的&#xff0c;做题顺序出错了&#xff0c;先做的第三个&#xff0c;错在第三个数据点之后&#xff0c;才做的第二个&#xff08;因为当时有个地方没检查出来&#xff09;所以这次比赛还是一如既往地打拉了 那么就来发一下题解吧 A. Array Divisibility …

text prompt如何超过77个词

【深度学习】sdwebui的token_counter,update_token_counter,如何超出77个token的限制?对提示词加权的底层实现_prompt中token权重-CSDN博客文章浏览阅读1.6k次,点赞26次,收藏36次。文章探讨了如何在StableDiffusionProcessing中处理超过77个token的提示,涉及token_counte…

公司网站建站模板源码系统 响应式网站模版 随心自定义 带完整的代码包以及搭建部署教程

系统概述 公司网站建站模板源码系统是一套基于最新技术开发的网站建设解决方案。该系统集成了众多先进的网站开发工具和功能模块&#xff0c;旨在帮助企业快速构建出美观、实用的公司网站。通过采用模块化设计&#xff0c;系统实现了高度可定制性&#xff0c;企业可以根据自身…

土木转行嵌入式,拿到一家初创公司的嵌入式研发offer,值得去吗

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;不论从未来行业的发展前景…

java项目如何配置不同环境变量 以及 原理

如何配置不同的profile 首先&#xff0c;一个java项目&#xff0c;需要有不同的环境配置&#xff0c;打包时&#xff0c;自动使用对应的配置。那么&#xff0c;如何实现呢&#xff1f; 在你的Spring Boot项目的src/main/resources目录下创建或添加一个application.yml文件。这…

纯CSS瀑布流

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>瀑布流布局</title> <style>/* 瀑布…

[论文精读]BrainLM: A foundation model for brain activity recordings

论文网址&#xff1a;pdf (openreview.net) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 省流版 1.1. 心得 1.2…