Python學習筆記:pd.date_range構造時間序列


一、介紹

類似於 range 產生等差數列,date_range 產生的是等差時間序列。

生成一個固定頻率的時間索引,必須指定 startendperiods 中的兩個參數值,否則報錯。

使用語法:

pandas.date_range(start=None, end=None, periods=None,
                 freq=None, tz=None, normalize=False,
                 name=None, closed=None, **kwargs)

參數說明:

start -- 開始時間
end -- 結束時間
periods -- 總數量長度
freq -- 時間間隔、日期偏移量 默認'D'
tz -- 時區
normalize -- 是否標准化到 midnight 午夜時間戳
name -- 列名稱
closed -- 首尾是否在內 'left'、'right'

二、實操

  • 指定開始、結束時間
import pandas as pd
# 指定開始、結束
pd.date_range(start='20211001', end='20211010')
'''
DatetimeIndex(['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04',
               '2021-10-05', '2021-10-06', '2021-10-07', '2021-10-08',
               '2021-10-09', '2021-10-10'],
              dtype='datetime64[ns]', freq='D')
'''
  • 指定個數
# 指定個數
pd.date_range(start='2021-10-01', periods=5)
'''
DatetimeIndex(['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04',
               '2021-10-05'],
              dtype='datetime64[ns]', freq='D')
'''
  • 指定頻率(間隔)

freq 可以傳入所有 Offset Aliases

# 指定頻率(間隔)
pd.date_range(start='2021-10-01', periods=10, freq='1D')
'''
DatetimeIndex(['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04',
               '2021-10-05', '2021-10-06', '2021-10-07', '2021-10-08',
               '2021-10-09', '2021-10-10'],
              dtype='datetime64[ns]', freq='D')
'''
pd.date_range(start='2021-10-01', end='2021-10-10', freq='3D')
'''
DatetimeIndex(['2021-10-01', '2021-10-04', '2021-10-07', '2021-10-10'], dtype='datetime64[ns]', freq='3D')
'''

import pandas as pd
pd.date_range('20211018', periods=10, freq='5H')
'''
DatetimeIndex(['2021-10-18 00:00:00', '2021-10-18 05:00:00',
               '2021-10-18 10:00:00', '2021-10-18 15:00:00',
               '2021-10-18 20:00:00', '2021-10-19 01:00:00',
               '2021-10-19 06:00:00', '2021-10-19 11:00:00',
               '2021-10-19 16:00:00', '2021-10-19 21:00:00'],
              dtype='datetime64[ns]', freq='5H')
'''

pd.date_range('20211018', periods=10, freq='3M')
'''
DatetimeIndex(['2021-10-31', '2022-01-31', '2022-04-30', '2022-07-31',
               '2022-10-31', '2023-01-31', '2023-04-30', '2023-07-31',
               '2023-10-31', '2024-01-31'],
              dtype='datetime64[ns]', freq='3M')
'''
  • business day(工作日)實現
pd.date_range('20211018', freq='B', periods=10)
'''
DatetimeIndex(['2021-10-18', '2021-10-19', '2021-10-20', '2021-10-21',
               '2021-10-22', '2021-10-25', '2021-10-26', '2021-10-27',
               '2021-10-28', '2021-10-29'],
              dtype='datetime64[ns]', freq='B')
'''
pd.bdate_range('20211018', periods=10) # 結果同上
  • 是否標准化到午夜時間戳
# 從0點開始
pd.date_range(start='2021-10-01 17:23:10', periods=10, freq='s', normalize=True)
'''
DatetimeIndex(['2021-10-01 00:00:00', '2021-10-01 00:00:01',
               '2021-10-01 00:00:02', '2021-10-01 00:00:03',
               '2021-10-01 00:00:04', '2021-10-01 00:00:05',
               '2021-10-01 00:00:06', '2021-10-01 00:00:07',
               '2021-10-01 00:00:08', '2021-10-01 00:00:09'],
              dtype='datetime64[ns]', freq='S')
'''

# 從指定時間開始
pd.date_range(start='2021-10-01 17:23:10', periods=10, freq='s')
'''
DatetimeIndex(['2021-10-01 17:23:10', '2021-10-01 17:23:11',
               '2021-10-01 17:23:12', '2021-10-01 17:23:13',
               '2021-10-01 17:23:14', '2021-10-01 17:23:15',
               '2021-10-01 17:23:16', '2021-10-01 17:23:17',
               '2021-10-01 17:23:18', '2021-10-01 17:23:19'],
              dtype='datetime64[ns]', freq='S')
'''
  • 左右開區間、閉區間
# 左閉右開
pd.date_range(start='2021-10-01', end='2021-10-10', freq='3D', closed='left')
# DatetimeIndex(['2021-10-01', '2021-10-04', '2021-10-07'], dtype='datetime64[ns]', freq='3D')

# 右閉左開
pd.date_range(start='2021-10-01', end='2021-10-10', freq='3D', closed='right')
# DatetimeIndex(['2021-10-04', '2021-10-07', '2021-10-10'], dtype='datetime64[ns]', freq='3D')

# 左閉右閉 默認
pd.date_range(start='2021-10-01', end='2021-10-10', freq='3D', closed=None)
# DatetimeIndex(['2021-10-01', '2021-10-04', '2021-10-07', '2021-10-10'], dtype='datetime64[ns]', freq='3D')
  • 時區
pd.date_range(start='20211001', periods=5, tz='Asia/Tokyo')
'''
DatetimeIndex(['2021-10-01 00:00:00+09:00', '2021-10-02 00:00:00+09:00',
               '2021-10-03 00:00:00+09:00', '2021-10-04 00:00:00+09:00',
               '2021-10-05 00:00:00+09:00'],
              dtype='datetime64[ns, Asia/Tokyo]', freq='D')
'''

三、其他

  • 時間范圍
pd.Timestamp.min, pd.Timestamp.max
'''
(Timestamp('1677-09-21 00:12:43.145225'),
 Timestamp('2262-04-11 23:47:16.854775807'))
'''

date_range 可能超出時間范圍,超出的時間要用 pd.period_range 進行序列構造。

pd.date_range('1510-10-01', periods=10, freq='D')
# OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1510-10-01 00:00:00

pd.period_range('1510-10-01', periods=10, freq='D')
'''
PeriodIndex(['1510-10-01', '1510-10-02', '1510-10-03', '1510-10-04',
             '1510-10-05', '1510-10-06', '1510-10-07', '1510-10-08',
             '1510-10-09', '1510-10-10'],
            dtype='period[D]', freq='D')
'''
  • 時間類型轉化
# 嘗試自動識別時間
pd.to_datetime(s, infer_datetime_format=True)

參考鏈接:pandas中時間序列——date_range函數

參考鏈接:pandas 時間序列之pd.date_range()

參考鏈接:Anchored offsets

參考鏈接:pandas.date_range


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM