Python (11) 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']]

参考: date_range时间序列–时间切片

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间序列是指按照时间顺序排列的一系列数据。在Python中,我们可以使用pandas库来处理时间序列数据。以下是一些常用的时间序列Python代码实现: 1. 创建时间序列 我们可以使用pandas库中的date_range()函数来创建时间序列。例如,以下代码将创建一个从2022年1月1日开始的时间序列,每隔一天取一个数据,共取10个数据: ``` import pandas as pd dates = pd.date_range('20220101', periods=10, freq='D') print(dates) ``` 2. 时间序列的索引 我们可以使用时间序列作为数据的索引。例如,以下代码将创建一个时间序列作为索引的DataFrame: ``` import pandas as pd dates = pd.date_range('20220101', periods=10, freq='D') df = pd.DataFrame({'value': range(10)}, index=dates) print(df) ``` 3. 时间序列的切片 我们可以使用时间序列对数据进行切片。例如,以下代码将输出2022年1月1日到2022年1月5日的数据: ``` import pandas as pd dates = pd.date_range('20220101', periods=10, freq='D') df = pd.DataFrame({'value': range(10)}, index=dates) print(df['20220101':'20220105']) ``` 4. 时间序列的重采样 我们可以使用resample()函数时间序列进行重采样。例如,以下代码将把每天的数据重采样为每周的数据: ``` import pandas as pd dates = pd.date_range('20220101', periods=10, freq='D') df = pd.DataFrame({'value': range(10)}, index=dates) weekly_df = df.resample('W').sum() print(weekly_df) ``` 5. 时间序列的滑动窗口 我们可以使用rolling()函数时间序列进行滑动窗口操作。例如,以下代码将计算每个窗口内的平均值: ``` import pandas as pd dates = pd.date_range('20220101', periods=10, freq='D') df = pd.DataFrame({'value': range(10)}, index=dates) rolling_mean = df.rolling(window=3).mean() print(rolling_mean) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值