date_range函数之时间切片
date_range函数语法
date_range函数主要用于生成一个固定频率的时间索引
date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, inclusive=None, **kwargs)
注意 :start、end、periods三个参数必须取两个,否则报错。
主要参数说明:
start
:开始日期,取值为str类型
end
:结束日期,取值为str类型
periods
:固定时期/时间数量,取值为整数或None
freq
:时间频率,取值为string或DateOffset,默认为’D’
normalize
:若参数为True表示将start、end参数值正则化到午夜时间戳
name
:生成时间索引对象的名称,取值为string或None
inclusive
:闭合区间, 取值:{None, ‘left’, ‘right’}
freq 一般取值:
取值 | 说明 |
---|---|
M | 月 |
B | 工作日 |
W | 星期天 |
D | 天 |
H | 小时 |
T | 分钟 |
S | 秒 |
L | 毫秒 |
date_range函数的简单使用
每天
import pandas as pd
pd.date_range(start='20221101',end='20221110')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04',
'2022-11-05', '2022-11-06', '2022-11-07', '2022-11-08',
'2022-11-09', '2022-11-10'],
dtype='datetime64[ns]', freq='D')
每2天(freq=‘2B’)
import pandas as pd
pd.date_range(start='20221101', end='20221110', freq='2D')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-03', '2022-11-05', '2022-11-07',
'2022-11-09'],
dtype='datetime64[ns]', freq='2D')
工作日 (freq=‘B’)
import pandas as pd
pd.date_range(start='20221101', end='20221110', freq='B')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04',
'2022-11-07', '2022-11-08', '2022-11-09', '2022-11-10'],
dtype='datetime64[ns]', freq='B')
生成10个长度的时间(periods=10)
import pandas as pd
pd.date_range(start='20221101', periods=10)
# 输出
DatetimeIndex(['2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04',
'2022-11-05', '2022-11-06', '2022-11-07', '2022-11-08',
'2022-11-09', '2022-11-10'],
dtype='datetime64[ns]', freq='D')
生成10个长度的时间,且每隔1天
pd.date_range(start='20221101',periods=10,freq='1D')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04',
'2022-11-05', '2022-11-06', '2022-11-07', '2022-11-08',
'2022-11-09', '2022-11-10'],
dtype='datetime64[ns]', freq='D')
每隔2天生成10个长度的时间
pd.date_range(start='20221101',periods=10,freq='2D')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-03', '2022-11-05', '2022-11-07',
'2022-11-09', '2022-11-11', '2022-11-13', '2022-11-15',
'2022-11-17', '2022-11-19'],
dtype='datetime64[ns]', freq='2D')
按月生成10个长度的时间(periods=10, freq=‘M’)
pd.date_range(start='20221101',periods=10,freq='M')
# 输出
DatetimeIndex(['2022-11-30', '2022-12-31', '2023-01-31', '2023-02-28',
'2023-03-31', '2023-04-30', '2023-05-31', '2023-06-30',
'2023-07-31', '2023-08-31'],
dtype='datetime64[ns]', freq='M')
生成时间索引对象name为dt
pd.date_range(start='20221101',end='20221110',freq='3D',name='dt')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-04', '2022-11-07', '2022-11-10'], dtype='datetime64[ns]', name='dt', freq='3D')
normalize为true
print(pd.date_range(start='2022-11-01 08:10:50',periods=10,freq='s',normalize=True))
# 输出
DatetimeIndex(['2022-11-01 00:00:00', '2022-11-01 00:00:01',
'2022-11-01 00:00:02', '2022-11-01 00:00:03',
'2022-11-01 00:00:04', '2022-11-01 00:00:05',
'2022-11-01 00:00:06', '2022-11-01 00:00:07',
'2022-11-01 00:00:08', '2022-11-01 00:00:09'],
dtype='datetime64[ns]', freq='S')
pd.date_range(start='2022-11-01 08:10:50',end='2022-11-02 09:20:40',freq='s',normalize=True)
# 输出
DatetimeIndex(['2022-11-01 00:00:00', '2022-11-01 00:00:01',
'2022-11-01 00:00:02', '2022-11-01 00:00:03',
'2022-11-01 00:00:04', '2022-11-01 00:00:05',
'2022-11-01 00:00:06', '2022-11-01 00:00:07',
'2022-11-01 00:00:08', '2022-11-01 00:00:09',
...
'2022-11-01 23:59:51', '2022-11-01 23:59:52',
'2022-11-01 23:59:53', '2022-11-01 23:59:54',
'2022-11-01 23:59:55', '2022-11-01 23:59:56',
'2022-11-01 23:59:57', '2022-11-01 23:59:58',
'2022-11-01 23:59:59', '2022-11-02 00:00:00'],
dtype='datetime64[ns]', length=86401, freq='S')
normalize为False
print(pd.date_range(start='2022-11-01 08:10:50',periods=10,freq='s',normalize=False))
# 输出
DatetimeIndex(['2022-11-01 08:10:50', '2022-11-01 08:10:51',
'2022-11-01 08:10:52', '2022-11-01 08:10:53',
'2022-11-01 08:10:54', '2022-11-01 08:10:55',
'2022-11-01 08:10:56', '2022-11-01 08:10:57',
'2022-11-01 08:10:58', '2022-11-01 08:10:59'],
dtype='datetime64[ns]', freq='S')
左闭右开(inclusive=‘left’)
pd.date_range(start='20221101', end='20221110', freq='d', inclusive='left')
# 输出
DatetimeIndex(['2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04',
'2022-11-05', '2022-11-06', '2022-11-07', '2022-11-08',
'2022-11-09'],
dtype='datetime64[ns]', freq='D')
左开右闭(inclusive=‘right’)
pd.date_range(start='20221101', end='20221110', freq='d', inclusive='right')
# 输出
DatetimeIndex(['2022-11-02', '2022-11-03', '2022-11-04', '2022-11-05',
'2022-11-06', '2022-11-07', '2022-11-08', '2022-11-09',
'2022-11-10'],
dtype='datetime64[ns]', freq='D')
常见使用
建议pd.date_range()函数的返回使用list,然后再通过strftime()函数规划日期时间的格式
# 1.最原始的使用方式
pd.date_range(start='2022-11-01 08:10:50',end='2022-11-01 23:59:59',freq='8H')
# 输出
DatetimeIndex(['2022-11-01 08:10:50', '2022-11-01 16:10:50'], dtype='datetime64[ns]', freq='8H')
# 2.建议返回使用list
list(pd.date_range(start='2022-11-01 08:10:50',end='2022-11-01 23:59:59',freq='8H'))
#输出
[Timestamp('2022-11-01 08:10:50', freq='8H'), Timestamp('2022-11-01 16:10:50', freq='8H')]
# 3.使用strftime()函数 调整日期时间格式
time_range = list(pd.date_range(start='2022-11-01 08:10:50',end='2022-11-01 23:59:59',freq='8H'))
time_range = [item.strftime('%Y-%m-%d %H:%M:%S') for item in time_range]
# 输出
['2022-11-01 08:10:50', '2022-11-01 16:10:50']
将指定的时间范围(例如一天24小时)按8小时频率生成时间片区间
import pandas as pd
def get_time_ranges(from_time, to_time, frequency):
from_time, to_time, frequency = pd.to_datetime(from_time), pd.to_datetime(to_time), frequency
time_range = list(pd.date_range(from_time, to_time, freq=f'{frequency}H'))
if to_time not in time_range:
time_range.append(to_time)
time_range = [item.strftime('%Y-%m-%d %H:%M:%S') for item in time_range]
time_ranges = []
for item in time_range:
f_time = item
t_time = (datetime.datetime.strptime(item, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(hours=frequency))
if t_time >= to_time:
t_time = to_time.strftime('%Y-%m-%d %H:%M:%S')
time_ranges.append([f_time, t_time])
break
time_ranges.append([f_time, t_time.strftime('%Y-%m-%d %H:%M:%S')])
return time_ranges
from_time = '2022-11-11 00:00:00'
to_time = '2022-11-13 23:59:59'
frequency = 8 #8小时间隔
get_time_ranges(from_time, to_time, frequency)
# 输出 一共9个区间
[['2022-11-11 00:00:00', '2022-11-11 08:00:00'],
['2022-11-11 08:00:00', '2022-11-11 16:00:00'],
['2022-11-11 16:00:00', '2022-11-12 00:00:00'],
['2022-11-12 00:00:00', '2022-11-12 08:00:00'],
['2022-11-12 08:00:00', '2022-11-12 16:00:00'],
['2022-11-12 16:00:00', '2022-11-13 00:00:00'],
['2022-11-13 00:00:00', '2022-11-13 08:00:00'],
['2022-11-13 08:00:00', '2022-11-13 16:00:00'],
['2022-11-13 16:00:00', '2022-11-13 23:59:59']]