Data Science 時間序列的索引與切片

2021-09-19 18:24:00 字數 3019 閱讀 3884

時間序列的索引與切片

索引時間序列的索引方法同樣是適用於dataframe,而且在時間序列中由於按照時間先後排序,故不用考慮順序問題。

基本位置索引,使用的方法和列表類似:

from datetime import datetime

rng = pd.date_range('2017/1','2017/3')

ts = pd.series(np.random.rand(len(rng)), index = rng)

print(ts.head())

print(ts[0])

print(ts[:2])

>>>

2017-01-01 0.107736

2017-01-02 0.887981

2017-01-03 0.712862

2017-01-04 0.920021

2017-01-05 0.317863

freq: d, dtype: float64

0.107735945027

2017-01-01 0.107736

2017-01-02 0.887981

freq: d, dtype: float64

除了基本位置索引之外還有時間序列標籤索引:

from datetime import datetime

rng = pd.date_range('2017/1','2017/3')

ts = pd.series(np.random.rand(len(rng)), index = rng)

print(ts['2017/1/2'])

print(ts['20170103'])

print(ts['1/10/2017'])

print(ts[datetime(2017,1,20)])

>>>

0.887980757812

0.712861778966

0.788336674948

0.93070380011

切片

切片的使用操作在上面索引部分的基本位置索引中有提到和series按照index索引原理一樣,也是末端包含。

rng = pd.date_range('2017/1','2017/3',freq = '12h')

ts = pd.series(np.random.rand(len(rng)), index = rng)

print(ts['2017/1/5':'2017/1/10'])

>>>

2017-01-05 00:00:00 0.462085

2017-01-05 12:00:00 0.778637

2017-01-06 00:00:00 0.356306

2017-01-06 12:00:00 0.667964

2017-01-07 00:00:00 0.246857

2017-01-07 12:00:00 0.386956

2017-01-08 00:00:00 0.328203

2017-01-08 12:00:00 0.260853

2017-01-09 00:00:00 0.224920

2017-01-09 12:00:00 0.397457

2017-01-10 00:00:00 0.158729

2017-01-10 12:00:00 0.501266

freq: 12h, dtype: float64

# 在這裡我們可以傳入月份可以直接獲取整個月份的切片

print(ts['2017/2'].head())

>>>

2017-02-01 00:00:00 0.243932

2017-02-01 12:00:00 0.220830

2017-02-02 00:00:00 0.896107

2017-02-02 12:00:00 0.476584

2017-02-03 00:00:00 0.515817

freq: 12h, dtype: float64

重複索引的時間序列

dates = pd.datetimeindex(['1/1/2015','1/2/2015','1/3/2015','1/4/2015','1/1/2015','1/2/2015'])

ts = pd.series(np.random.rand(6), index = dates)

print(ts)

# 我們可以通過is_unique檢查值或index是否重複

print(ts.is_unique,ts.index.is_unique)

>>>

2015-01-01 0.300286

2015-01-02 0.603865

2015-01-03 0.017949

2015-01-04 0.026621

2015-01-01 0.791441

2015-01-02 0.526622

dtype: float64

true false

按照上面的結果,可以看出在上面的時間序列中,出現了index(ts.index.is_unique)重複但值(ts.is_unique)不重複的情況。

我們可以通過時間序列把重複索引對應的值取平均值來解決索引重複的問題:

print(ts.groupby(level = 0).mean())

# 通過groupby做分組,重複的值這裡用平均值處理

>>>

2015-01-01 0.545863

2015-01-02 0.565244

2015-01-03 0.017949

2015-01-04 0.026621

dtype: float64

時間序列分析

協方差矩陣和相關係數主要研究兩個連續變數的相似程度 相關性 協方差公式 協方差矩陣 相關係數 cov x,y var x var y 相關係數矩陣 可以使用ljung box方法進行檢驗。即box.test data,type ljung box lag num 來檢驗,當p value大於0.05...

時間序列分析

時間序列資料分為平穩 寬平穩 和非平穩兩種。平穩序列中也包括隨機序列,即序列資料之間沒有任何相關性或記憶性,純隨機的,這種序列沒有挖掘分析的必要。純隨機序列也稱為白雜訊序列。序列中的隨機變數之間的相關係數r k 0,k不為 0 經過預處理若發現序列是平穩非隨機序列,則可用的模型為arma。ar模型是...

時間序列python

平穩性檢測 平穩性的定義 圍繞乙個常數上下波動且波動範圍有限,即有常數均值和常數方差。如果有明顯的趨勢或者週期性,那它通常不是平穩序列。檢測方法有三種 1 時序圖檢測 2 自相關係數和偏相關係數 通過spss 截尾 就是在某階之後,係數都為0 拖尾 就是有乙個緩慢衰減的趨勢,但是不都為0 2.不平穩...