日期和时间数据类型
datetime
是一个关于时间的库,常用的类有
1、date
类型,存储公历日期:年、月、日
2、time
类型,存储时间:时、分、秒
3、datetime
类型:存储日期时间
日期类型的使用
# 导入datetime模块
import datetime
# 创建日期
date = datetime.date(2021, 4, 15)
print(date)
# 获取年
print(date.year)
# 获取月
print(date.month)
# 获取日
print(date.day)
2021-04-15
2021
4
15
时间类型的使用
# 创建时间
import datetime
time = datetime.time(20, 57, 20)
print(time)
# 获取小时
print(time.hour)
# 获取分钟
print(time.minute)
# 获取秒
print(time.second)
20:57:20
20
57
20
日期时间类型
import datetime
# 创建日期时间
datetime = datetime.datetime(2021, 4, 15, 20, 57, 20)
print(datetime)
# 获取年
print(datetime.year)
# 获取月
print(datetime.month)
# 获取日
print(datetime.day)
# 获取小时
print(datetime.hour)
# 获取分钟
print(datetime.minute)
# 获取秒
print(datetime.second)
2021-04-15 20:57:20
2021
4
15
20
57
20
# 获取当前时间
datetime.now()
datetime.datetime(2021, 4, 15, 20, 58, 16, 383532)
import datetime
dt = datetime.datetime(2021, 4, 15, 20, 57, 20)
print(dt)
print(type(dt)) # datetime类型
2021-04-15 20:57:20
<class 'datetime.datetime'>
# 转换成字符串类型
dt1 = str(dt)
print(type(dt1))
print(dt1)
<class 'str'>
2021-04-15 20:57:20
import datetime
date_time = datetime.datetime(2021, 4, 15, 21, 00, 30) # strftime()方法的作用是将时间格式转化为自定义字符串格式,格式可以自定义。
str_time = date_time.strftime('%m/%d/%Y %H:%M:%S') # 转化输出时间格式
str_time
'04/15/2021 21:00:30'
import datetime
strp = datetime.datetime.strptime('Apr-15-21 21:01', '%b-%d-%y %H:%M')
# strptime()方法的作用是字符串时间转化为datetime格式,需要注意的是按一定的格式输出时间。后面的参数是前面日期时间参数的样式
print(strp)
2021-04-15 21:01:00
pandas时间序列基础
# 使用Pandas的date_range()方法可以快速创建出一个日期范围
pd.date_range(start=None,end=None,periods=None,freq="D")
# start:日期范围的开始;end:日期范围的结束;periods:创建日期的个数;freq:日期间隔时长,取值为string, 默认为'D',即:一天为日期偏移量
import pandas as pd
date= pd.date_range(start='20210415',end='20210501') # 创建从2021-4-15至2021-5-1,间隔为一天的
print(date)
print(type(date)) # 时间索引类型
DatetimeIndex(['2021-04-15', '2021-04-16', '2021-04-17', '2021-04-18',
'2021-04-19', '2021-04-20', '2021-04-21', '2021-04-22',
'2021-04-23', '2021-04-24', '2021-04-25', '2021-04-26',
'2021-04-27', '2021-04-28', '2021-04-29', '2021-04-30',
'2021-05-01'],
dtype='datetime64[ns]', freq='D')
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
date2 = pd.date_range(start='20210415',end='20210430',freq='10D') # 间隔为10天
date2
DatetimeIndex(['2021-04-15', '2021-04-25'], dtype='datetime64[ns]', freq='10D')
date3 = pd.date_range(start='20210415',periods=3,freq='5D') # 从2021-4-15日开始,以5天为间隔,创建三个日期
date3
DatetimeIndex(['2021-04-15', '2021-04-20', '2021-04-25'], dtype='datetime64[ns]', freq='5D')
date4 = pd.date_range(start='20210415',periods=3,freq='5B') # 从2021-4-15日开始,以5个工作日为间隔,创建三个日期
date4
DatetimeIndex(['2021-04-15', '2021-04-22', '2021-04-29'], dtype='datetime64[ns]', freq='5B')
更多频率的缩写:
有时需要分析随时间变化产生变化的一个现象,就需要将时间索引设置为数据的索引,然后通过时间索引获取到一定时间范围的数据进行分析
时间索引Series的创建
# 创建一个以时间序列为索引的Series数据。
import pandas as pd
import numpy as np
date_index = pd.date_range(start='20210415',periods=30)
data = np.random.randint(0,100,size=30) # 创建一个30天的时间索引
se = pd.Series(index=date_index,data=data) # 随机创建30个0-100的整数
se
2021-04-15 4
2021-04-16 13
2021-04-17 20
2021-04-18 48
2021-04-19 31
2021-04-20 74
2021-04-21 60
2021-04-22 5
2021-04-23 6
2021-04-24 88
2021-04-25 94
2021-04-26 24
2021-04-27 0
2021-04-28 75
2021-04-29 75
2021-04-30 44
2021-05-01 28
2021-05-02 73
2021-05-03 50
2021-05-04 3
2021-05-05 86
2021-05-06 78
2021-05-07 83
2021-05-08 11
2021-05-09 35
2021-05-10 93
2021-05-11 41
2021-05-12 7
2021-05-13 17
2021-05-14 50
Freq: D, dtype: int32
时间索引Series的取值
# 根据年份进行取值
se['2021']
2021-04-15 4
2021-04-16 13
2021-04-17 20
2021-04-18 48
2021-04-19 31
2021-04-20 74
2021-04-21 60
2021-04-22 5
2021-04-23 6
2021-04-24 88
2021-04-25 94
2021-04-26 24
2021-04-27 0
2021-04-28 75
2021-04-29 75
2021-04-30 44
2021-05-01 28
2021-05-02 73
2021-05-03 50
2021-05-04 3
2021-05-05 86
2021-05-06 78
2021-05-07 83
2021-05-08 11
2021-05-09 35
2021-05-10 93
2021-05-11 41
2021-05-12 7
2021-05-13 17
2021-05-14 50
Freq: D, dtype: int32
# 依据年和月进行取值
se['2021-04']
2021-04-15 4
2021-04-16 13
2021-04-17 20
2021-04-18 48
2021-04-19 31
2021-04-20 74
2021-04-21 60
2021-04-22 5
2021-04-23 6
2021-04-24 88
2021-04-25 94
2021-04-26 24
2021-04-27 0
2021-04-28 75
2021-04-29 75
2021-04-30 44
Freq: D, dtype: int32
# 可以使用时间戳进行切片获取数据
se['2021-04-20':'2021-05-05']
2021-04-20 74
2021-04-21 60
2021-04-22 5
2021-04-23 6
2021-04-24 88
2021-04-25 94
2021-04-26 24
2021-04-27 0
2021-04-28 75
2021-04-29 75
2021-04-30 44
2021-05-01 28
2021-05-02 73
2021-05-03 50
2021-05-04 3
2021-05-05 86
Freq: D, dtype: int32
# 有的时候用csv导入时间数据时,默认的是字符串的数据类型。
# 当可视化的时候,会出现没有按时间先后顺序的方式绘图 ,所以需要将字符串解析为时间类型的数据类型。
# 使用Pandas的to_datetime()方法可以将字符串形式的日期转换成时间格式。
# pd.to_datetime(arg,format=None)
# arg:需要修改的数据; format:需要修改数据的格式
pd.to_datetime('2021-04-15 21:31') # 默认转化为时间戳类型
Timestamp('2021-04-15 21:31:00')
# 如果想对时间格式修改,可以使用to_pydatetime()方法将Timestamp类型转换成datetime类型。
pd.to_datetime('2021-04-15 21:31').to_pydatetime()
datetime.datetime(2021, 4, 15, 21, 31)
# 时间中含有中文
pd.to_datetime('2019年10月10日',format='%Y年%m月%d日')
Timestamp('2019-10-10 00:00:00')