快速浏览
时序的创建
四类时间变量
Date times(时间点/时刻)
Pandas在时间点建立的输入格式规定上给了很大的自由度,下面的语句都能正确建立同一时间点:
pd.to_datetime('2020.1.1')
pd.to_datetime('2020 1.1')
pd.to_datetime('2020 1 1')
pd.to_datetime('2020 1-1')
pd.to_datetime('2020-1 1')
pd.to_datetime('2020-1-1')
pd.to_datetime('2020/1/1')
pd.to_datetime('1.1.2020')
pd.to_datetime('1.1 2020')
pd.to_datetime('1 1 2020')
pd.to_datetime('1 1-2020')
pd.to_datetime('1-1 2020')
pd.to_datetime('1-1-2020')
pd.to_datetime('1/1/2020')
pd.to_datetime('20200101')
pd.to_datetime('2020.0101')
#下面的语句都会报错
#pd.to_datetime('2020\\1\\1')
#pd.to_datetime('2020`1`1')
#pd.to_datetime('2020.1 1')
#pd.to_datetime('1 1.2020')
语句会报错时可利用format参数强制匹配
pd.to_datetime('2020\\1\\1',format='%Y\\%m\\%d')
pd.to_datetime('2020`1`1',format='%Y`%m`%d')
pd.to_datetime('2020.1 1',format='%Y.%m %d')
pd.to_datetime('1 1.2020',format='%d %m.%Y')
使用列表可以将其转为时间点索引
print(pd.Series(range(2),index=pd.to_datetime(['2020/1/1','2020/1/2'])))
print(type(pd.to_datetime(['2020/1/1','2020/1/2'])))
2020-01-01 0
2020-01-02 1
dtype: int64
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
对于DataFrame而言,如果列已经按照时间顺序排好,则利用to_datetime可自动转换
df = pd.DataFrame({
'year': [2020, 2020],'month': [1, 1], 'day': [1, 2]})
pd.to_datetime(df)
0 2020-01-01
1 2020-01-02
dtype: datetime64[ns]
Date times(时间点/时刻)Timestamp的精度远远不止day,可以最小到纳秒ns;同时,它带来范围的代价就是只有大约584年的时间点是可用.
print(pd.to_datetime('2020/1/1 00:00:00.123456789'))
print(pd.Timestamp.min)
print(pd.Timestamp.max)
2020-01-01 00:00:00.123456789
1677-09-21 00:12:43.145225
2262-04-11 23:47:16.854775807
date_range方法中start/end/periods(时间点个数)/freq(间隔方法)是该方法最重要的参数,给定了其中的3个,剩下的一个就会被确定。其中freq参数有许多选项(符号 D/B日/工作日 W周 M/Q/Y月/季/年末日 BM/BQ/BY月/季/年末工作日 MS/QS/YS月/季/年初日 BMS/BQS/BYS月/季/年初工作日 H小时 T分钟 S秒),更多选项可看此处
print(pd.date_range(start='2020/1/1',end='2020/1/10',periods=3))
print(pd.date_range(start='2020/1/1',end='2020/1/10',freq='D'))
print(pd.date_range(start='2020/1/1',periods=3,freq='D'))
print(pd.date_range(end='2020/1/3',periods=3,freq='D'))
print(pd.date_range(start='2020/1/1',periods=3,freq='T'))
print(pd.date_range(start='2020/1/1',periods=3,freq='M'))
print(pd.date_range(start='2020/1/1',periods=3,freq='BYS'))
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-05 12:00:00',
'2020-01-10 00:00:00'],
dtype='datetime64[ns]', freq=None)
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10'],
dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 00:01:00',
'2020-01-01 00:02:00'],
dtype='datetime64[ns]', freq='T')
DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31'], dtype='datetime64[ns]', freq='M')
DatetimeIndex(['2020-01-01', '2021-01-01', '2022-01-03'], dtype='datetime64[ns]', freq='BAS-JAN')
bdate_range是一个类似与date_range的方法,特点在于可以在自带的工作日间隔设置上,再选择weekmask参数和holidays参数。它的freq中有一个特殊的’C’/‘CBM’/'CBMS’选项,表示定制,需要联合weekmask参数和holidays参数使用。例如现在需要将工作日中的周一、周二、周五3天保留,并将部分holidays剔除
weekmask = 'Mon Tue Fri'
holidays = [pd.Timestamp('2020/1/%s'%i) for i in range(7,13)