首页Python【Python数据分析】5...

【Python数据分析】53.时间序列——日期和时间数据类型和工具


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————————————————–

在多个时间点重复记录的数据形成了时间序列。许多时间序列都是固定概率的,也就是说数据是根据一定的规律每隔一段时间出现一次,比如每15秒、每5分钟或每月一次。时间序列也可以是不规则的,没有固定的时间单位或单位时间的偏移量。

  • 如何标记或引用时间序列数据取决于应用程序,可能有以下之一:

  • 时间戳:固定时刻;

  • 固定时间区间:例如,2017年1月,或2020年全年;

  • 时间间隔:由开始和结束时间戳表示,时间区间可以看做是特殊的时间间隔;

  • 实验时间或消耗时间:每个时间戳都是相对于特定开始时间的时间度量(例如,自从放入烤箱后每秒烘焙饼干的直径)。

本次主要关注前三类时间序列,

pandas 提供了许多内置的时间序列工具和算法。你可以高效地处理大型时间序列,并对不规则和固定频率的时间序列进行切片和切块、聚合和重新采样。其中一些工具对金融和经济应用程序很有用,当然也可以使用它们来分析服务器日志数据。

1.日期和时间数据类型和工具:

Python 标准库包括日期和时间数据的类型,以及与日历相关的功能。

datetimetimecalendar 模块是开始处理时间数据的主要内容。datetime.datetime 类型,或简称为 datetime,被广泛使用,以微秒级对日期和时间进行存储。

1>>> from datetime import datetime
2
3>>> now = datetime.now()
4>>> now
5datetime.datetime(20221224183232483672)
6
7>>> now.year , now.month , now.day
8(20221224)
 datetime.timedelta,简称 timedelta,表示两个日期时间对象之间的时间差:
1>>> delta = datetime(2022,12,24) - datetime(2010,11,22,18,10)
2>>> delta
3datetime.timedelta(days=4414, seconds=21000)
4
5>>> delta.days , delta.seconds
6(441421000)

可以向一个 datetime 对象添加(或减去)一个timedelta或其整数倍来产生一个新的 datetime 对象:

1>>> from datetime import timedelta
2
3>>> start = datetime(2010,11,22)
4
5>>> start - timedelta(12)
6datetime.datetime(2010111000)
7
8>>> start + timedelta(2)*2
9datetime.datetime(2010112600)

datetime模块中的数据类型如下所示:

类型 说明
date 使用公历存储日历日期(年、月、日)
time 将一天中的时间存储为小时、分钟、秒和微秒
datetime 存储日期和时间
timedelta 两个datetime 值之间的差异(如天、秒和微秒)
tzinfo 存储时区信息的基本类型


2.字符串和Datetime相互转换:

你可以使用 str strftime 方法(需传递一个指定的格式)将 datetime 对象和 pandas Timestamp 对象进行格式化:

1>>> stamp = datetime(2010,11,22)
2
3>>> str(stamp)
4'2010-11-22 00:00:00'
5
6>>> stamp.strftime("%Y-%m-%d")
7'2010-11-22'

datetime 格式规范(兼容ISO C89)如下所示:

类型
说明
%Y 四位数年份
%y 两位数年份
%m 两位数月份 [01, 12]
%d 两位数的日期 [01, 31]
%H 小时(24 小时制)[00, 23]
%I 小时(12 小时制)[01, 12]
%M 两位数分钟 [00, 59]
%S 秒 [00, 61](第60、61秒为闰秒)
%f 微秒作为整数,用零填充(从 000000 到 999999)
%j 一年中的第几天,作为零填充的整数(从 001 到 336)
%w 星期日期 [0(星期日),6]
%u 工作日,从 1 开始的整数,其中 1 是星期一
%U 一年中的周数 [00, 53];星期日作为一周的第一天,一年中第一个星期日之前的日期作为“第 0 周”
%W 一年中的周数 [00, 53];星期一作为一周的第一天,一年中第一个星期一之前的日期作为“第 0 周”
%z 格式为+HHMM 或-HHMM的UTC 时区偏移量;如果没有时区则为空
%Z

时区名称作为字符串,如果没有时区则为空字符串

%F %Y-%m-%d 的简写(例如 2012-4-18)
%D %m/%d/%y 的简写(例如 04/18/12)
你可以使 datetime.strptime 将字符串转换为日期(但不能使用某些代码,如 %F):
1>>> value = "2010-11-22"
2
3>>> datetime.strptime(value , "%Y-%m-%d")
4datetime.datetime(2010112200)
5
6>>> datestrs = ["2010-11-22" , "2012-5-17"]
7>>> [datetime.strptime(x, "%Y-%m-%d") for x in datestrs]
8[datetime.datetime(2010112200), datetime.datetime(201251700)]

datetime.strptime是在已知格式情况下转换日期的好方法。

Pandas通常是面向处理日期数组的,无论是用作轴索引还是用作DataFrame中的列,pandas.to_datetime 方法可以转换许多不同类型的日期表示格式。像ISO 8601这样的标准日期格式可以被快速转换。

1>>> datestrs = ["2010-11-22" , "2012-5-17"]
2
3>>> pd.to_datetime(datestrs)
4DatetimeIndex(['2010-11-22''2012-05-17'], dtype='datetime64[ns]', freq=None)

它还可以处理那些被视为缺失值的值(None、空字符串等):

NaT(Not a Time)是 pandas 的时间戳数据中的 null 值。

 1>>> datestrs = ["2010-11-22" , "2012-5-17"] + [None]
2
3>>> pd.to_datetime(datestrs)
4DatetimeIndex(['2010-11-22''2012-05-17''NaT'], dtype='datetime64[ns]', freq=None)
5
6>>> pd.to_datetime(datestrs)[2]
7NaT
8
9>>> pd.isna(pd.to_datetime(datestrs))
10array([False, False,  True])

datetime 对象还具有许多其他国家/地区或语言系统的本地格式化选项。例如,与英语相比,德语或法语在缩写的月份名称上会有所不同。

类型
说明
%a 缩写的工作日名称
%A 全写的工作日名称
%b 简写的月份名称
%B 全写的月份名称
%c 完整的日期和时间(例如,“2012 年 5 月 1 日星期二 04:20:57 PM”)
%p  AM 或 PM 的地区等效
%x 适合地区的格式化日期(例如,在美国,2012 年 5 月 1 日会产生“05/01/2012”)
%X 适合地区的时间(例如,“04:24:12 PM”)


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments