4.3 转换与处理时间数据
4.3.1 转换字符串时间为标准时间
在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准时间类型。pandas继承了NumPy库和datetime库的时间相关模块,提供了6种时间相关的类。

1、Timestamp
Timestamp作为时间类中最基础的,也是最为常用的类型,在多数情况下,时间相关的字符串都会转换成为Timestamp。pandas提供了to_datetime函数,能够实现这一目标。
import pandas as pd
data = pd.read_csv('E:/Input/ptest.csv')
print(data['time'].head(3))
print(f"转换前:{data['time'].dtypes}")
data['time'] = pd.to_datetime(data['time']) # 转换为Timestamp类型
print(f"转换后:{data['time'].dtypes}")
print(data['time'].head(3))
# Timestamp类型的时间是有限制的
print("最小时间为:", pd.Timestamp.min)
print("最大时间为:", pd.Timestamp.max)

注意:Timestamp类型的时间是有限制的,最小时间为: 1677-09-21 00:12:43.145224193
最大时间为: 2262-04-11 23:47:16.854775807
2、DatetimeIndex或者PeriodIndex
除了将数据字原始DataFrame中直接转换为Timestamp格式外,还可以将数据单独提取出来将其转换为DatetimeIndex或者PeriodIndex。
转换为PeriodIndex的时候需要注意,需要通过freq参数指定时间间隔,常用的时间间隔有Y为年,M为月,D为日,H为小时,T为分钟,S为秒。两个函数可以用来转换数据还可以用来创建时间序列数据,其参数非常类似。
DatetimeIndex与PeriodIndex函数及其参数说明

DatetimeIndex和PeriodIndex两者区别在日常使用的过程中相对较小,其中DatetimeIndex是用来指代一系列时间点的一种数据结构,而PeriodIndex则是用来指代一系列时间段的数据结构。
# DatetimeIndex或者PeriodIndex
timeindex = pd.DatetimeIndex(data['time'])
# print(timeindex)
print("转换为DatetimeIndex后:", type(timeindex))
# 常用的时间间隔有Y为年,M为月,D为日,H为小时,T为分钟,S为秒
periodindex = pd.PeriodIndex(data['time'], freq='S')
# print(periodindex)
print("转换为PeriodIndex后:", type(periodindex))

频率参数:freq
默认freq = ‘D’:每日历日
B:每工作日
H:每小时
T/MIN:每分
S:每秒
L:每毫秒(千分之一秒)
U:每微秒(百万分之一秒)
W-MON:从指定星期几开始算起,每周
星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUN
WOM-2MON:每月的第几个星期几开始算,这里是每月第二个星期一
M:每月最后一个日历日
MS:每月第一个日历日
Q-月:指定月为季度末,每个季度末最后一月的最后一个日历日
月缩写:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC
所以Q-月只有三种情况:1-4-7-10,2-5-8-11,3-6-9-12
QS-月:指定月为季度末,每个季度末最后一月的第一个日历日
A-月:每年指定月份的最后一个日历日
AS-月:每年指定月份的第一个日历日
BM:每月最后一个工作日
BMS:每月第一个工作日
BQ-月:指定月为季度末,每个季度末最后一月的最后一个工作日
BQS-月:指定月为季度末,每个季度末最后一月的第一个工作日
BA-月:每年指定月份的最后一个工作日
BAS-月:每年指定月份的第一个工作日
4.3.2 提取时间序列数据信息
在多数涉及时间相关的数据处理,统计分析的过程中,需要提取时间中的年份,月份等数据,使用对应的Timestamp类属性就能够实现这一目的。
Timestamp类常用属性及说明

# 4.3.2 提取时间序列数据信息
y1 = [i.year for i in data['time']]
print(y1[:3]) # 打印年的前三个
m1 = [i.month for i in data['time']]
print(m1[:3]) # 打印月的前三个
d1 = [i.day for i in data


677

被折叠的 条评论
为什么被折叠?



