pandas中时间序列——date_range函数

通过?pandas.date_range命令查看date_range函数帮助文档

语法:pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)

该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。

主要参数说明:

periods:固定时期,取值为整数或None

freq:日期偏移量,取值为string或DateOffset,默认为'D'

normalize:若参数为True表示将start、end参数值正则化到午夜时间戳

name:生成时间索引对象的名称,取值为string或None

closed:可以理解成在closed=None情况下返回的结果中,若closed=‘left’表示在返回的结果基础上,再取左开右闭的结果,若closed='right'表示在返回的结果基础上,再取做闭右开的结果

In [11]: import pandas as pd

In [12]: pd.date_range(start='20170101',end='20170110')
Out[12]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10'],
              dtype='datetime64[ns]', freq='D')

In [13]: pd.date_range(start='20170101',periods=10)
Out[13]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10'],
              dtype='datetime64[ns]', freq='D')

In [14]: pd.date_range(start='20170101',periods=10,freq='1D')
Out[14]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10'],
              dtype='datetime64[ns]', freq='D')

In [15]: pd.date_range(start='20170101',end='20170110',freq='3D',name='dt')
Out[15]: DatetimeIndex(['2017-01-01', '2017-01-04', '2017-01-07', '2017-01-10'],
 dtype='datetime64[ns]', name='dt', freq='3D')

In [16]: pd.date_range(start='2017-01-01 08:10:50',periods=10,freq='s',normaliz
    ...: e=True)
Out[16]:
DatetimeIndex(['2017-01-01 00:00:00', '2017-01-01 00:00:01',
               '2017-01-01 00:00:02', '2017-01-01 00:00:03',
               '2017-01-01 00:00:04', '2017-01-01 00:00:05',
               '2017-01-01 00:00:06', '2017-01-01 00:00:07',
               '2017-01-01 00:00:08', '2017-01-01 00:00:09'],
              dtype='datetime64[ns]', freq='S')

In [17]: pd.date_range(start='2017-01-01 08:10:50',end='2017-01-02 09:20:40',fr
    ...: eq='s',normalize=True)
Out[17]:
DatetimeIndex(['2017-01-01 00:00:00', '2017-01-01 00:00:01',
               '2017-01-01 00:00:02', '2017-01-01 00:00:03',
               '2017-01-01 00:00:04', '2017-01-01 00:00:05',
               '2017-01-01 00:00:06', '2017-01-01 00:00:07',
               '2017-01-01 00:00:08', '2017-01-01 00:00:09',
               ...
               '2017-01-01 23:59:51', '2017-01-01 23:59:52',
               '2017-01-01 23:59:53', '2017-01-01 23:59:54',
               '2017-01-01 23:59:55', '2017-01-01 23:59:56',
               '2017-01-01 23:59:57', '2017-01-01 23:59:58',
               '2017-01-01 23:59:59', '2017-01-02 00:00:00'],
              dtype='datetime64[ns]', length=86401, freq='S')

In [18]: pd.date_range(start='2017-01-01 08:10:50',periods=15,freq='s',normaliz
    ...: e=False)
Out[18]:
DatetimeIndex(['2017-01-01 08:10:50', '2017-01-01 08:10:51',
               '2017-01-01 08:10:52', '2017-01-01 08:10:53',
               '2017-01-01 08:10:54', '2017-01-01 08:10:55',
               '2017-01-01 08:10:56', '2017-01-01 08:10:57',
               '2017-01-01 08:10:58', '2017-01-01 08:10:59',
               '2017-01-01 08:11:00', '2017-01-01 08:11:01',
               '2017-01-01 08:11:02', '2017-01-01 08:11:03',
               '2017-01-01 08:11:04'],
              dtype='datetime64[ns]', freq='S')

In [19]: pd.date_range(start='20170101',end='20170110',freq='3D',closed='left')
    ...:
Out[19]: DatetimeIndex(['2017-01-01', '2017-01-04', '2017-01-07'], dtype='dateti
me64[ns]', freq='3D')

In [20]: pd.date_range(start='20170101',end='20170110',freq='3D',closed='right'
    ...: )
Out[20]: DatetimeIndex(['2017-01-04', '2017-01-07', '2017-01-10'], dtype='dateti
me64[ns]', freq='3D')





<think>好的,我现在要详细介绍一下pandas中的date_range函数。首先,我需要回忆一下自己对这个函数的了解,然后整理相关的知识点,确保准确无误。 date_rangepandas中用来生成日期范围的函数,常用于时间序列分析。用户可能会关心它的参数、用法以及实际应用场景。我应该从基本用法开始,逐步展开。 首先,参数方面,记得主要的参数包括start、end、periods、freq等。start和end指定起始和结束日期,periods是生成的时间段数量,freq是频率,比如天、月、小时等。需要详细解释每个参数的作用和如何组合使用。 然后,注意不同参数组合的情况。比如,如果同时指定了start、end和periods,可能会出现冲突,这时候函数如何处理?可能需要说明参数之间的优先级或者如何正确使用。 接下来是频率参数freq,这是比较复杂的部分。pandas支持多种频率别名,如'D'代表天,'M'代表月末,'MS'代表月初,'H'小时,'T'分钟等等。需要列举一些常用的频率别名,并举例说明不同的freq值如何影响生成的日期范围。 另外,date_range返回的是一个DatetimeIndex对象,可以用于创建时间序列的DataFrame或Series。这一点也很重要,说明其在实际中的应用,比如在数据重采样、时间切片等方面的用途。 还要提到时区处理的问题,虽然date_range本身可能不直接处理时区,但生成的DatetimeIndex可以通过tz_localize或tz_convert方法调整时区。不过用户如果没问到,可能不需要深入,但可以简要提及。 可能的错误或常见问题:比如参数冲突导致报错,比如同时指定了end和periods但没有start,这时候函数的行为是什么?需要说明正确的参数组合方式,避免用户在使用时出错。 举例说明会更有帮助,比如生成一个按天的日期范围,或者按月的,或者指定生成多少个时间段。这些例子能让用户更直观地理解函数的用法。 还要注意版本兼容性,但可能大部分用户使用的是较新的pandas版本,所以一般不用特别强调,除非有参数在旧版本中不存在。 最后,总结一下date_range的主要用途和优势,比如快速生成规则的时间序列索引,方便时间序列分析等。 检查是否有遗漏的重要点,比如closed参数,控制区间闭合方式(包含起始或结束),这个参数在需要精确控制边界时很有用,应该提到。 整理好结构,分点介绍,确保逻辑清晰,用户能够一步步理解。同时,保持语言简洁,避免过于技术化的术语,用例子辅助说明。</think>`pandas.date_range` 是 Pandas 库中用于生成规则时间序列的核心函数。以下为详细说明,结合参数、用法和示例: --- ### **一、函数基本语法** ```python pandas.date_range( start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, inclusive=None, # Pandas 1.4.0+ 替代 closed **kwargs ) ``` --- ### **二、核心参数详解** 1. **`start` / `end`** - 起始/结束日期,支持格式:`字符串`(如 `'2023-01-01'`)、`datetime` 对象。 - 至少需指定 `start` 或 `end` 中的一个。 2. **`periods`** - 生成的时间点数量。需与 `start` 或 `end` 搭配使用。 3. **`freq`** - 频率别名,决定时间间隔。常用选项: - 日:`'D'` - 工作日:`'B'` - 小时:`'H'` - 月(月末):`'M'`,月(月初):`'MS'` - 年(年末):`'Y'`,年(年初):`'YS'` - 复合频率:`'3D'`(每3天),`'1H30min'`(每1.5小时) 4. **`closed` / `inclusive`** - 控制区间闭合方式(是否包含边界): - `closed='left'`:包含 `start`,不包含 `end` - `closed='right'`:包含 `end`,不包含 `start` - `inclusive='both'`(Pandas 1.4.0+):同时包含两端 --- ### **三、典型用法示例** #### 1. 指定起止时间 + 频率 ```python import pandas as pd # 生成2023年1月1日至1月5日的每日日期 dates = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D') # 输出:DatetimeIndex(['2023-01-01', '2023-01-02', ..., '2023-01-05'], dtype='datetime64[ns]', freq='D') ``` #### 2. 指定起始时间 + 时间段数 ```python # 从2023-01-01开始,生成3个按周间隔的日期 dates = pd.date_range(start='2023-01-01', periods=3, freq='W') # 输出:DatetimeIndex(['2023-01-01', '2023-01-08', '2023-01-15'], freq='W-SUN') ``` #### 3. 处理月末日期 ```python # 生成2023年每月最后一个工作日 dates = pd.date_range(start='2023-01-01', periods=12, freq='BM') # BM: Business Month End # 结果包含各月最后一个非周末日期,如 '2023-01-31', '2023-02-28' 等 ``` #### 4. 精确控制闭合区间 ```python # 包含end日期 dates = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D', inclusive='both') # 等价于 closed='right' 在旧版本中的行为 ``` --- ### **四、常见应用场景** 1. **创建时间序列数据索引** ```python import numpy as np index = pd.date_range('2023-01-01', periods=5, freq='D') data = pd.DataFrame(np.random.rand(5), index=index, columns=['Value']) ``` 2. **重采样(Resampling)** ```python # 将数据从日频率转换为月频率(取均值) monthly_data = data.resample('M').mean() ``` 3. **时间范围筛选** ```python # 选取2023年1月的数据 jan_data = data['2023-01'] ``` --- ### **五、注意事项** - **参数冲突**:若同时指定 `start` + `end` + `periods`,需确保逻辑一致性,否则会报错。 - **时区处理**:生成后可通过 `tz_localize` 添加时区: ```python dates = pd.date_range('2023-01-01', periods=3, tz='Asia/Shanghai') ``` - **性能**:生成大规模日期时效率极高,优于手动循环。 掌握 `date_range` 可高效构建时间序列分析的基础结构,是处理时间数据的关键工具。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值