本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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 标准库包括日期和时间数据的类型,以及与日历相关的功能。
datetime、time和calendar 模块是开始处理时间数据的主要内容。datetime.datetime 类型,或简称为 datetime,被广泛使用,以微秒级对日期和时间进行存储。
1>>> from datetime import datetime
2
3>>> now = datetime.now()
4>>> now
5datetime.datetime(2022, 12, 24, 18, 32, 32, 483672)
6
7>>> now.year , now.month , now.day
8(2022, 12, 24)
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(4414, 21000)
可以向一个 datetime 对象添加(或减去)一个timedelta或其整数倍来产生一个新的 datetime 对象:
1>>> from datetime import timedelta
2
3>>> start = datetime(2010,11,22)
4
5>>> start - timedelta(12)
6datetime.datetime(2010, 11, 10, 0, 0)
7
8>>> start + timedelta(2)*2
9datetime.datetime(2010, 11, 26, 0, 0)
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) |
1>>> value = "2010-11-22"
2
3>>> datetime.strptime(value , "%Y-%m-%d")
4datetime.datetime(2010, 11, 22, 0, 0)
5
6>>> datestrs = ["2010-11-22" , "2012-5-17"]
7>>> [datetime.strptime(x, "%Y-%m-%d") for x in datestrs]
8[datetime.datetime(2010, 11, 22, 0, 0), datetime.datetime(2012, 5, 17, 0, 0)]
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”) |
本篇文章来源于微信公众号: 码农设计师