pandas-时间序列与日期用法(二)

本节介绍时间戳

1.时间戳是最基本的时间序列数据,用于把数值与时点关联在一起。Pandas 对象通过时间戳调用时点数据。pandas-时间序列与日期用法(二)_第1张图片

2. 大多数情况下,用时间段改变变量更自然。Period 表示的时间段更直观,还可以用日期时间格式的字符串进行推断。 pandas-时间序列与日期用法(二)_第2张图片

3. Timestamp与Period可以用作索引。作为索引的 Timestamp 与 Period 列表则被强制转换为对应的 DatetimeIndex与PeriodIndexpandas-时间序列与日期用法(二)_第3张图片

pandas-时间序列与日期用法(二)_第4张图片

 Pandas 可以识别这两种表现形式,并在两者之间进行转化。Pandas 后台用 Timestamp 实例代表时间戳,用 DatetimeIndex 实例代表时间戳序列。pandas 用 Period 对象表示符合规律的时间段标量值,用 PeriodIndex 表示时间段序列。未来版本将支持用任意起止时间实现不规律时间间隔

4. 转换时间戳

to_datetime 函数用于转换字符串、纪元式及混合的日期Series或日期列表。转换的是 Series 时,返回的是具有相同的索引的 Series,日期时间列表则会被转换为 DatetimeIndexpandas-时间序列与日期用法(二)_第5张图片

解析欧式日期(日-月-年),要用 dayfirst 关键字参数(但是没发现有什么区别):pandas-时间序列与日期用法(二)_第6张图片

to_datetime 转换单个字符串时,返回的是单个 TimestampTimestamp 仅支持字符串输入,不支持 dayfirstformat 等字符串解析选项,如果要使用这些选项,就要用 to_datetime Pandas 还支持直接使用 DatetimeIndex 构建器:

创建 DatetimeIndex 时,传递字符串 infer 即可推断索引的频率。 5. 使用format提供格式参数

 要实现精准转换,除了传递 datetime 字符串,还要指定 format 参数,指定此参数还可以加速转换速度。

6. 用多列组合日期时间 

pandas 还可以把 DataFrame 里的整数或字符串列组合成 Timestamp Seriespandas-时间序列与日期用法(二)_第7张图片

pd.to_datetime 查找列名里日期时间组件的标准名称,包括:

  • 必填:yearmonthday
  • 可选:hourminutesecondmillisecondmicrosecondnanosecond

 7. 无效数据

 不可解析时,默认值 errors='raise' 会触发错误:

errors='ignore' 返回原始输入: errors='coerce' 把无法解析的数据转换为 NaT,即不是时间(Not a Time):

 8. 纪元时间戳

 pandas 支持把整数或浮点数纪元时间转换为 Timestamp 与 DatetimeIndex。鉴于 Timestamp 对象内部存储方式,这种转换的默认单位是纳秒。不过,一般都会用指定其它时间单位 unit 来存储纪元数据,纪元时间从 origin 参数指定的时点开始计算。pandas-时间序列与日期用法(二)_第8张图片

用带 tz 参数的纪元时间戳创建Timestamp或DatetimeIndex时,要先把纪元时间戳转化为 UTC,然后再把结果转换为指定时区。不过这种操作方式现在已经废弃了,对于其它时区 Wall Time 里的纪元时间戳,建议先把纪元时间戳转换为无时区时间戳,然后再把时区本地化 

9. 把时间戳转换为纪元 

 反转上述操作,把 Timestamp 转换为 unix 纪元:pandas-时间序列与日期用法(二)_第9张图片

首先与纪元开始时点(1970 年 1 月 1 日午夜,UTC)相减,然后以 1 秒为时间单位(unit='1s')取底整除。pandas-时间序列与日期用法(二)_第10张图片 10. 应用 origin 参数

 origin 参数可以指定 DatetimeIndex 的备选开始时点。例如,把1960-01-01 作为开始日期:

默认值为 origin='unix',即 1970-01-01 00:00:00,一般把这个时点称为 unix 纪元 或 POSIX 时间。 11. 生成时间戳范围

实际工作中,经常要生成含大量时间戳的超长索引,一个个输入时间戳又枯燥,又低效。如果时间戳是定频的,用 date_range()与 bdate_range()函数即可创建 DatetimeIndexdate_range 默认的频率是日历日bdate_range 的默认频率是工作日pandas-时间序列与日期用法(二)_第11张图片

 date_rangebdate_range 等便捷函数可以调用各种频率别名pandas-时间序列与日期用法(二)_第12张图片

 12. 时间戳的界限

Pandas 时间戳的最低单位为纳秒,64 位整数显示的时间跨度约为 584 年,这就是 Timestamp 的界限:pandas-时间序列与日期用法(二)_第13张图片

 

你可能感兴趣的:(pandas的那些事,pandas)