软件测试|数据处理神器pandas教程(八)

简介: 软件测试|数据处理神器pandas教程(八)

在这里插入图片描述

前言

前面的文章中,我们讲解了pandas处理时间的功能,本篇文章我们来介绍pandas时间序列的处理。

时间序列

顾名思义,时间序列(time series),就是由时间构成的序列,它指的是在一定时间内按照时间顺序测量的某个变量的取值序列,比如一天内的温度会随时间而发生变化,或者股票的价格会随着时间不断的波动,这里用到的一系列时间,就可以看做时间序列。时间序列包含三种应用场景,分别是:

  • 特定的时刻(timestamp),也就是时间戳;
  • 固定的日期(period),比如某年某月某日;
  • 时间间隔(interval),每隔一段时间具有规律性;

在处理时间序列的过程中,我们一般会遇到两个问题,第一,如何创建时间序列;第二,如何更改已生成时间序列的频率。 Pandas 为解决上述问题提供了一套简单、易用的方法。

在Python中,有内置的datetime模块来获取当前时间,通过datetime.now()即可获取本地当前时间。代码如下:

from datetime import datetime
#数据类型为datetime
print(datetime.now())

pandas也提供了一系列处理时间的方法,下面我们对pandas时间处理进行介绍。

创建时间戳

TimeStamp(时间戳) 是时间序列中的最基本的数据类型,它将数值与时间点完美结合在一起。Pandas 使用下列方法创建时间戳:

import pandas as pd
print (pd.Timestamp('2023-03-26'))

-----------------------------
输出结果如下:
2023-03-26 00:00:00

同样,可以将整型或浮点型表示的时间转换为时间戳。默认的单位是纳秒(时间戳单位),示例如下:

import pandas as pd
print(pd.Timestamp(1679818304,unit='s'))

---------------------
输出结果如下:
2023-03-26 08:11:44

创建时间范围

通过 date_range() 方法可以创建某段连续的时间或者固定间隔的时间时间段。该函数提供了三个参数,分别是:

  • start:开始时间
  • end:结束时间
  • freq:时间频率,默认为 "D"(天)

示例如下:

import pandas as pd
#freq表示时间频率,每30min变化一次
print(pd.date_range("9:00", "15:15", freq="30min").time)

-----------------
输出结果如下:
[datetime.time(9, 0) datetime.time(9, 30) datetime.time(10, 0)
 datetime.time(10, 30) datetime.time(11, 0) datetime.time(11, 30)
 datetime.time(12, 0) datetime.time(12, 30) datetime.time(13, 0)
 datetime.time(13, 30) datetime.time(14, 0) datetime.time(14, 30)
 datetime.time(15, 0)]

更改时间频率,上面我们的时间频率是以30分钟为间隔的,我们也可以将时间间隔修改为一个小时,代码如下:

import pandas as pd
# 修改为按小时
print(pd.date_range("7:10", "11:45", freq="H").time)

----------------------
输出结果如下:
[datetime.time(7, 10) datetime.time(8, 10) datetime.time(9, 10)
 datetime.time(10, 10) datetime.time(11, 10)]

转化为时间戳

可以使用 to_datetime() 函数将 series 或 list 转换为日期对象,其中 list 会转换为DatetimeIndex。示例如下:

import pandas as pd

print(pd.to_datetime(pd.Series(['Mar 23, 2023','2023-03-26', None])))
-----------------------------
输出结果如下:
0   2023-03-23
1   2023-03-26
2          NaT
dtype: datetime64[ns]

注: NaT 表示的不是时间 ,它等效于 NaN。

还有一个示例

import pandas as pd
#传入list,生成Datetimeindex
print(pd.to_datetime(['Mar 20, 2023','2023-03-31', None]))

------------------------
输出结果如下:
DatetimeIndex(['2023-03-20', '2023-03-31', 'NaT'], dtype='datetime64[ns]', freq=None)

频率和周期转换

Time Periods 表示时间跨度,一段时间周期,它被定义在 Pandas Periods 类中,通过该类提供的方法可以实现将频率转换为周期。比如 Periods() 方法,可以将频率 "M"(月)转换为 Period(时间段)。

下面示例,使用 asfreq() 和 start 参数,打印 "01" ,若使用 end 参数,则打印 "31"。示例如下:

import pandas as pd
x = pd.Period('2023', freq='M')
#start参数
print(x.asfreq('D', 'start'))
#end参数
print(x.asfreq('D', 'end'))

------------------------
输出结果如下:
2023-01-01
2023-01-31

对于常用的时间序列频率,Pandas 为其规定了一些字符串别名,我们将这些别名称为“offset(偏移量)”。如下表所示:

别名 描述 别名 描述
B 工作日频率 BQS 工作季度开始频率
D 日历日频率 A 年终频率
W 每周频率 BA 工作年度结束频率
M 月末频率 BAS 工作年度开始频率
SM 半月结束频率 BH 营业时间频率
BM 工作月结束频率 H 小时频率
MS 月开始频率 T,min 每分钟频率
SMS 半月开始频率 S 每秒钟频率
BMS 工作月开始频率 L,ms 毫秒
Q 季末频率 U,us 微妙
BQ 工作季度结束频率 N 纳秒
QS 季度开始频率

时间周期计算

周期计算,指的是对时间周期进行算术运算,所有的操作将在“频率”的基础上执行。

import pandas as pd
#S表示秒
x = pd.Period('2023', freq='S')
print(x)
----------------------------
输出结果如下:

2023-01-01 00:00:00

执行计算示例:

import pandas as pd
x = pd.Period('2023', freq='S')
#加2s的时间
print(x+2)
---------------
输出结果如下:
2023-01-01 00:00:02

完整示例:

import pandas as pd

#定义时期period,默认freq="Y"年份
p1=pd.Period('2023')
p2=pd.Period('2022')
#使用f''格式化输出
print(f'p1={p1}年')
print(f'p2={p2}年')
print(f'p1和p2间隔{p1-p2}年')
#f''表示字符串格式化输出
print(f'五年前是{p1-5}年')

--------------------
输出结果如下:
p1=2023年
p2=2022年
p1和p2间隔<YearEnd: month=12>年
五年前是2018年

创建时间周期

使用 period_range() 方法来创建时间周期范围。示例如下:

import pandas as pd
#Y表示年
p = pd.period_range('2020','2023', freq='Y')
print(p)
-----------------------------
输出结果如下:
PeriodIndex(['2020', '2021', '2022', '2023'], dtype='period[A-DEC]')

创建日期范围

Pandas 提供了用来创建日期序列的函数 date_range(),该函数的默认频率为 "D", 也就是“天”。日期序列只包含年、月、日,不包含时、分、秒。

示例如下:

import pandas as pd
print(pd.date_range('03/26/2023', periods=10))
-------------------
输出结果如下:
DatetimeIndex(['2023-03-26', '2023-03-27', '2023-03-28', '2023-03-29',
               '2023-03-30', '2023-03-31', '2023-04-01', '2023-04-02',
               '2023-04-03', '2023-04-04'],
              dtype='datetime64[ns]', freq='D')

注:使用 date_range() 来创建日期范围时,该函数包含结束的日期,用数学术语来说就是区间左闭右闭,即包含起始值,也包含结束值。

更改日频率

使用下列方法可以修改频率,比如按“天”为按“月”,示例如下:

import pandas as pd
print(pd.date_range('01/31/2023', periods=5,freq='M'))
-------------------------
输出结果如下:
DatetimeIndex(['2023-01-31', '2023-02-28', '2023-03-31', '2023-04-30',
               '2023-05-31'],
              dtype='datetime64[ns]', freq='M')

工作日时间

bdate_range() 表示创建工作日的日期范围,它与 date_range() 不同,它不包括周六、周日。

import pandas as pd

print(pd.bdate_range('03/26/2023', periods=10))
----------------------
输出结果如下:
DatetimeIndex(['2023-03-27', '2023-03-28', '2023-03-29', '2023-03-30',
               '2023-03-31', '2023-04-03', '2023-04-04', '2023-04-05',
               '2023-04-06', '2023-04-07'],
              dtype='datetime64[ns]', freq='B')

date_range() 默认频率是日历日,而 bdate_range() 的默认频率是工作日。

注:中国传统节假日并没有默认为休息日,所以输出的还是按照是否为周六周日判定是否为工作日。

总结

本文主要介绍了pandas时间序列相关内容,pandas对于时间的处理非常丰富,功能也十分强大,对于我们的工作有很大帮助。后续我们将介绍pandas时间差的处理。

相关文章
|
7月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
520 0
|
8月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
7月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
675 0
|
10月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
9月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1870 10
|
8月前
|
监控 测试技术 API
n8n自动化测试教程 (1):环境搭建与初识n8n
n8n是一款开源、可视化的工作流自动化工具,测试工程师可通过拖拽节点快速构建API测试流程,实现测试编排、数据管理、自动化监控与告警等功能,提升测试效率与覆盖率。
|
9月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
699 0
|
9月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
11月前
|
运维 数据挖掘 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
Pandas时间数据处理涵盖了从基础到高级的全面功能。其核心由Timestamp、DatetimeIndex、Period和Timedelta四个类构建,支持精准的时间点与区间操作。内容包括时间数据生成(字符串解析与序列生成)、时间索引与切片、高级运算(偏移重采样与窗口计算)、时区处理、周期性数据分析及实战案例(如智能电表数据)。此外,还涉及性能优化技巧和未来展望,帮助用户高效处理时间序列数据并应用于预测分析等场景。
476 1
|
11月前
|
传感器 安全 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
本文深入讲解Pandas时间数据处理技巧,从时间对象转换到高性能计算全面覆盖。通过真实案例拆解,掌握Timestamp与Period的核心概念、时间序列生成、重采样方法及窗口函数应用。同时剖析时区处理、性能优化策略及常见陷阱解决方案,并展望Pandas 2.0的时间处理新特性。内容强调“时间索引优先”原则,助你高效分析股票K线、用户行为等时间序列数据。
391 0

热门文章

最新文章