0
点赞
收藏
分享

微信扫一扫

【python数据分析(16)】Pandas中时间序列处理(2)Timestamp时刻数据与DatetimeIndex时间索引


1. Timestamp时刻数据

1.1​​pandas.Timestamp()​​ 时刻数据

代表时间点,是pandas的数据类型,是将值与时间点相关联的最基本类型的时间序列数据

import numpy as np
import pandas as pd
from datetime import datetime

date1 = datetime(2016,12,1,12,45,30)
date2 = '2017-12-21'
t1 = pd.Timestamp(date1)
t2 = pd.Timestamp(date2)
print(t1,type(t1))
print(t2)
print(pd.Timestamp('2017-12-21 15:00:22'))
print(t2 - t1)
print((t2 - t1).days)

–> 输出的结果为:(这里输入的三个数据都是同一类型的,既然是时间刻就可以进行运算)

2016-12-01 12:45:30 <class 'pandas._libs.tslibs.timestamps.Timestamp'>
2017-12-21 00:00:00
2017-12-21 15:00:22
384 days 11:14:30
384

1.2 时刻数据转化

1) 单时间数据转化,转化为pandas的时刻数据,数据类型为​​Timestamp​

date1 = datetime(2016,12,1,12,45,30)
date2 = '2017-12-21'
t1 = pd.to_datetime(date1)
t2 = pd.to_datetime(date2)
print(t1,type(t1))
print(t2,type(t2))

–> 输出的结果为:

2016-12-01 12:45:30 <class 'pandas._libs.tslibs.timestamps.Timestamp'>
2017-12-21 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>

2) 多时间数据转化 (demo),将会转换为pandas的​​DatetimeIndex​

lst_date = [ '2017-12-21', '2017-12-22', '2017-12-23']
t3 = pd.to_datetime(lst_date)
print(t3)
print(type(t3))

–> 输出的结果为:

DatetimeIndex(['2017-12-21', '2017-12-22', '2017-12-23'], dtype='datetime64[ns]', freq=None)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

3) 多时间数据转化 (base),多个时间数据转换时间戳索引

date1 = [datetime(2015,6,1),datetime(2015,7,1),datetime(2015,8,1),datetime(2015,9,1),datetime(2015,10,1)]
date2 = ['2017-2-1','2017-2-2','2017-2-3','2017-2-4','2017-2-5','2017-2-6']
print(date1,'\n')
print(date2,'\n')
t1 = pd.to_datetime(date2)
t2 = pd.to_datetime(date2)
print(t1,'\n')
print(t2)

–> 输出的结果为:

[datetime.datetime(2015, 6, 1, 0, 0), datetime.datetime(2015, 7, 1, 0, 0), datetime.datetime(2015, 8, 1, 0, 0), datetime.datetime(2015, 9, 1, 0, 0), datetime.datetime(2015, 10, 1, 0, 0)] 

['2017-2-1', '2017-2-2', '2017-2-3', '2017-2-4', '2017-2-5', '2017-2-6']

DatetimeIndex(['2017-02-01', '2017-02-02', '2017-02-03', '2017-02-04',
'2017-02-05', '2017-02-06'],
dtype='datetime64[ns]', freq=None)

DatetimeIndex(['2017-02-01', '2017-02-02', '2017-02-03', '2017-02-04',
'2017-02-05', '2017-02-06'],
dtype='datetime64[ns]', freq=None)

★★★ 当一组时间序列中夹杂其他格式数据,可用​​errors​​​参数返回,​​errors = 'ignore'​​:不可解析时返回原始输入,下面就是直接生成一般数组

date3 = ['2017-2-1','2017-2-2','2017-2-3','hello world!','2017-2-5','2017-2-6']
t3 = pd.to_datetime(date3, errors = 'ignore')
print(t3)
print(type(t3))

–> 输出的结果为:(注意里面的​​'hello world!'​​)

Index(['2017-2-1', '2017-2-2', '2017-2-3', 'hello world!', '2017-2-5',
'2017-2-6'],
dtype='object')
<class 'pandas.core.indexes.base.Index'>

★★★ ​​errors = 'coerce'​​​ 不可扩展,缺失值返回​​NaT(Not a Time)​​​,结果认为​​DatetimeIndex​

t4 = pd.to_datetime(date3, errors = 'coerce')
print(t4)
print(type(t4))

–> 输出的结果为:(注意和上面返回的标签数据类型做对比)

DatetimeIndex(['2017-02-01', '2017-02-02', '2017-02-03', 'NaT', '2017-02-05',
'2017-02-06'],
dtype='datetime64[ns]', freq=None)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

2. DatetimeIndex时间戳索引

通过上面的输出结果可以看出,最后生成的数据类型就是属于pandas里面的时间索引对象

2.1 ​​pd.DatetimeIndex()​​​与​​TimeSeries​​时间序列

1) ​​pd.DatetimeIndex()​​ 时间戳索引,直接生成时间戳索引,支持str、datetime.datetime

rng = pd.DatetimeIndex(['12/1/2017','12/2/2017','12/3/2017','12/4/2017','12/5/2017'])
print(rng)
print(type(rng))
print(rng[0])
print(type(rng[0]))

–> 输出的结果为:(单个时间戳为Timestamp,多个时间戳为DatetimeIndex)

DatetimeIndex(['2017-12-01', '2017-12-02', '2017-12-03', '2017-12-04',
'2017-12-05'],
dtype='datetime64[ns]', freq=None)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
2017-12-01 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

★★★ 2)以​​DatetimeIndex​​​为​​index​​​的​​Series​​​,为​​TimeSries​​时间序列(创建时刻数据TimeSeries时间序列)

st = pd.Series(np.random.rand(len(rng)), index = rng)
print(st)
print(type(st))
print(st.index)

–> 输出的结果为:(就是应用时间戳索引创建Series,可以理解为​​TimeSries​​时间序列)

2017-12-01    0.881504
2017-12-02 0.691407
2017-12-03 0.185201
2017-12-04 0.457349
2017-12-05 0.637777
dtype: float64
<class 'pandas.core.series.Series'>
DatetimeIndex(['2017-12-01', '2017-12-02', '2017-12-03', '2017-12-04',
'2017-12-05'],
dtype='datetime64[ns]', freq=None)


举报

相关推荐

0 条评论