Pandas詳解七之DatetimeIndex、PeriodIndex和TimedeltaIndex時間序列

約定:

import pandas as pd
import numpy as np

時間序列

上節介紹的Timestamp、Period和Timedelta對象都是單個值,這些值都可以放在索引或數據中。作爲索引的時間序列有:DatetimeIndex、PeriodIndex和TimedeltaIndex,它們都可以作爲Series和DataFrame的索引。

一、創建DatetimeIndex、PeriodIndex和TimedeltaIndex時間序列

  • 調用pd.date_range()創建DatetimeIndex序列:
index=pd.date_range("2018-03-17","2018-03-30",freq="2H")
loc=np.random.choice(np.arange(len(index)),size=4,replace=False)#隨機選取4個互不相同的數
loc.sort()
ts_index=index[loc]
ts_index

代碼結果:

DatetimeIndex(['2018-03-17 14:00:00', '2018-03-18 08:00:00',
               '2018-03-25 00:00:00', '2018-03-27 22:00:00'],
              dtype='datetime64[ns]', freq=None)
  • 通過.to_period()將DatetimeIndex序列轉換爲PeriodIndex序列:
pd_index=ts_index.to_period("D")
pd_index

代碼結果:

PeriodIndex(['2018-03-17', '2018-03-18', '2018-03-25', '2018-03-27'], dtype='period[D]', freq='D')
  • 將DetetimeIndex序列轉換爲TimedeltaIndex序列:
longseconds=np.diff(ts_index)
td_index=pd.TimedeltaIndex(longseconds)
td_index

代碼結果:

TimedeltaIndex(['0 days 18:00:00', '6 days 16:00:00', '2 days 22:00:00'], dtype='timedelta64[ns]', freq=None)
  • 三者提供了許多與時間有關的屬性
ts_index.weekday

代碼結果:

Int64Index([5, 6, 6, 1], dtype='int64')
pd_index.month

代碼結果:

Int64Index([3, 3, 3, 3], dtype='int64')
td_index.seconds

代碼結果:

Int64Index([64800, 57600, 79200], dtype='int64')
  • 通過DatetimeIndex.shift()移動時間點:
ts_index.shift(2,"2H")

代碼結果:

DatetimeIndex(['2018-03-17 18:00:00', '2018-03-18 12:00:00',
               '2018-03-25 04:00:00', '2018-03-28 02:00:00'],
              dtype='datetime64[ns]', freq=None)
  • 通過DatetimeIndex.normalize()將時刻修改爲當天的凌晨零點:
ts_index.normalize()

代碼結果:

DatetimeIndex(['2018-03-17', '2018-03-18', '2018-03-25', '2018-03-27'], dtype='datetime64[ns]', freq=None)

二、將時間序列作爲索引

TimestampIndex,PeriodIndex和TimedeltaIndex都可以作爲Series、Dataframe對象的索引和列,在此只介紹一種。

  • 作爲Series對象的索引:
ts_series=pd.Series(range(4),index=ts_index)
ts_series

代碼結果:

2018-03-17 14:00:00    0
2018-03-18 08:00:00    1
2018-03-25 00:00:00    2
2018-03-27 22:00:00    3
dtype: int32
  • 通過between_time()返回位於指定時間段的數據集:
ts_series.between_time("7:00","17:00")

代碼結果:

2018-03-17 14:00:00    0
2018-03-18 08:00:00    1
dtype: int32
  • 通過tshift()將索引移動指定的時間:
ts_series.tshift(1,"2D")

代碼結果:

2018-03-19 14:00:00    0
2018-03-20 08:00:00    1
2018-03-27 00:00:00    2
2018-03-29 22:00:00    3
dtype: int32
  • 作爲Seires的列:
ts_data=pd.Series(ts_index)
ts_data

代碼結果:

0   2018-03-17 14:00:00
1   2018-03-18 08:00:00
2   2018-03-25 00:00:00
3   2018-03-27 22:00:00
dtype: datetime64[ns]
  • 通過屬性dt調用時間屬性:
ts_data.dt.hour

代碼結果:

0    14
1     8
2     0
3    22
dtype: int64

謝謝大家的瀏覽,
希望我的努力能幫助到您,
共勉!

發佈了48 篇原創文章 · 獲贊 181 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章