时间序列数据分析学习笔记
目录
时间序列的分类
时间戳(timestamp)
特定的时刻
固定周期(period)
某月或某年
时间间隔(interval)
由起始时间戳和结束时间戳表示
Python的日期和时间处理
Python的日期和时间数据类型
类型 | 格式 |
---|---|
time | 时间格式 |
date | 日期格式 |
datetime | 日期时间格式 |
timestamp | 时间戳格式 |
datetime、time和calender模块是处理时间数据的主要工具
日期时间对象datetime
datetime.datetime
存储日期和细化到微秒的时间
datetime.timedelta
表示两个datetime对象的时间差
可为一个datetime对象加或减一个timedelta或其整数倍来产生一个新的datetime对象
datetime模块中包含的数据类型
说明 | 类型 |
---|---|
date | 以公历形式存储日历日期(年、月、日) |
time | 把时间存储为时、分、秒、毫秒 |
datetime | 存储日期和时间 |
timedelta | 表示两个datetime值之间的差(日、秒、毫秒) |
tzinfo | 用于存储时区信息 |
字符串和datetime相互转换
import datetime
#datetime表示时间的数据类型是datetime
first_day=datetime.datetime(2020,1,1)
print(first_day)
print(type(first_day))
2020-01-01 00:00:00
<class 'datetime.datetime'>
datetime类型转换成字符串
date.strftime(’%Y-%m-%d’)
可以把datetime类型转换成想要的格式的字符串
str(date)
按默认格式转换
#方法一:date.strftime('%Y-%m-%d')
#此法可以设置转换成字符串的表示格式
first_day_str=first_day.strftime('%Y-%m-%d')
print(first_day_str)
print(type(first_day_str))
#方法二:str(date)
print('\n'+str(first_day))
2020-01-01
<class 'str'>
2020-01-01 00:00:00
字符串变成datetime类型
datetime.datetime.strptime(datestr, ‘%Y/%m/%d’)
在已知格式的情况下转换日期,但每次都需要输入格式代码:比如’%Y/%m/%d’
last_day_str='2020/12/31'
#方法一:datetime.datetime.strptime(datestr, '%Y/%m/%d')
last_day=datetime.datetime.strptime(last_day_str, '%Y/%m/%d')
print(last_day)
print(type(last_day))
2020-12-31 00:00:00
<class 'datetime.datetime'>
dateutil.parser.parse()
第三方包dateutil包的parser.parse方法
dateutil能够解析大部分人类可理解的日期表示
#方法二:dateutil.parser.parse()
#DateUtil.parse方法会自动识别一些常用格式
from dateutil.parser import parse
last_day_1=parse(last_day_str)
print(last_day_1)
print(type(last_day_1))
2020-12-31 00:00:00
<class 'datetime.datetime'>
ps: 在国际场合下,日期出现在月份之前很常见,此时可传递dayfirst=True来表明这种情况
print(parse('2020/2/11',dayfirst=True))
2020-11-02 00:00:00
pd.to_datetime()
to_datetime()方法可同时转换很多种不同的日期表示格式
还可处理那些被认为是缺失值的值
#方法三:pd.to_datetime()
#可处理缺失值和空字符串
import pandas as pd
#一个日期格式不同且有缺失值的数据表
date_dic={
'id':['a','b','c'],'date':['2020.1.1','2019/2/1',None]}
date=pd.DataFrame(date_dic)
print(date)
#转换成datetime格式
date['date']=pd.to_datetime(date['date'])
print('\n',date)
#查看缺失值
print('\n',date['date'][2])
print(type(date['date'][2]))
id date
0 a 2020.1.1
1 b 2019/2/1
2 c None
id date
0 a 2020-01-01
1 b 2019-02-01
2 c NaT
NaT
<class 'pandas._libs.tslibs.nattype.NaTType'>
NaT(Not a Time)是panda中时间戳数据的null值
read_csv()方法中的parse_dates参数
read_csv(path,parse_dates=[要转换成日期格式的列名])
时间戳timestamp
获取当前时间戳
time.time()
import time
#获取当前时间戳
now=time.time()
now
1604297902.3029757
默认情况下,python的时间戳是以秒为单位输出的float
把具体日期转换成时间戳
time.strptime()
time.mktime()
#一个时间字符串
t1='2020-11-02 14:21:00'
#用time.strptime()把时间字符串变成struct_time
t1_struct_time=time.strptime(t1,'%Y-%m-%d %H:%M:%S')
print(t1_struct_time)
print(type(t1_struct_time))
#用time.mktime()把时间数组变成时间戳
t1_timestamp=time.mktime(t1_struct_time)
print(t1_timestamp)
print(type(t1_timestamp))
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=2, tm_hour=14, tm_min=21, tm_sec=0, tm_wday=0, tm_yday=307, tm_isdst=-1)
<class 'time.struct_time'>
1604298060.0
<class 'float'>
时间戳转换成datetime日期格式
datetime.utcfromtimestamp()
import datetime
#使用datetime.utcfromtimestamp()把时间戳转换为指定时间格式
t1_datetime=datetime.datetime.utcfromtimestamp(t1_timestamp)
print(t1_datetime)
print(type(t1_datetime))
2020-11-02 06:21:00
<class 'datetime.datetime'>
Pandas的时间序列数据处理
pandas中的基础时间序列
pandas中的基础