Pandas 基礎 (14) - DatetimeIndex and Resample

Rachel發表於2019-04-14

這一小節要介紹兩個內容, 一個是 DatetimeIndex 日期索引, 另一個是 Resample, 這是一個函式, 可以通過引數的設定, 來調整資料的查詢條件, 從而得到不同的結果.

首先看下關於 DatetimeIndex 的內容, 照例先引入一個csv 檔案作為資料基礎:

import pandas as pd
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/14_ts_datetimeindex/aapl.csv')
df.head()

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

檢視一下 Date 列的資料型別:

type(df.Date[0])

輸出:

str

從資料結果來看, 目前的 Date 列儲存的是字串, 這顯然是不適合用來做資料分析的, 需要轉換成時間型別才可以:

import pandas as pd
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/14_ts_datetimeindex/aapl.csv', parse_dates=['Date'], index_col='Date')
df.head()

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

這裡在引入資料的同時, 用 parse_dates 引數將 Date 列轉成了 時間型別, 並把 Date 列設定為索引列, 因為我們後面的資料分析都會基於日期.

檢視一下索引:

df.index

輸出:

DatetimeIndex(['2017-07-07', '2017-07-06', '2017-07-05', '2017-07-03',
               '2017-06-30', '2017-06-29', '2017-06-28', '2017-06-27',
               '2017-06-26', '2017-06-23',
               ...
               '2016-07-22', '2016-07-21', '2016-07-20', '2016-07-19',
               '2016-07-18', '2016-07-15', '2016-07-14', '2016-07-13',
               '2016-07-12', '2016-07-11'],
              dtype='datetime64[ns]', name='Date', length=251, freq=None)

上面輸出的最後一行有: dtype='datetime64[ns]', 證明 Date 列的資料型別已經從字串變成了時間. 那麼, 下面就嘗試著根據索引來檢視一些資料:

檢視 2017年1月的所有資料:

df['Jan, 2017']

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

檢視 2017年1月閉市資料的平均值:

df['Jan, 2017'].Close.mean()

輸出:

119.57000000000001

檢視具體某一天的資料:

df['2017-01-03']

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

檢視某幾天的資料:

df['2017-01-07':'2017-01-01']

輸出:

Pandas 基礎 (14) - DatetimeIndex and Resample

以上, 就是關於 DatetimeIndex 要跟大家分享的內容了, 總結一下, 可以看到我們只要把日期列設定為索引列, 並且保證其資料型別是時間, 就可以利用這個索引靈活地運算元據了.

下面我們來看下關於 resample() 函式的使用:

df.Close.resample('M').mean()

輸出:

Date
2016-07-31     99.473333
2016-08-31    107.665217
2016-09-30    110.857143
2016-10-31    115.707143
2016-11-30    110.154286
2016-12-31    114.335714
2017-01-31    119.570000
2017-02-28    133.713684
2017-03-31    140.617826
2017-04-30    142.886842
2017-05-31    152.227727
2017-06-30    147.831364
2017-07-31    143.625000
Freq: M, Name: Close, dtype: float64

這裡我們可以一步一步來看, 首先我們要獲取所有的閉市資料, 在這個資料基礎上又通過 resample() 函式加以加工, 函式裡傳的引數是 M, 就是 month 的縮寫, 也就是我們要以月為單位, 也就是說要每個整月的資料, 那要每個月的什麼值, 這個是必須要指定的, 否則計算機不知道是返回每個月的合計,還是最小值, 還是平均值等等, 所以後面用了 mean(), 也就是說要去平均值.

還可以將資料以圖表的形式輸出:

df.Close.resample('W').mean().plot()

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

以季度為單位輸出柱形圖:

df.Close.resample('Q').mean().plot(kind='bar')

輸出:

Pandas 基礎(14) - DatetimeIndex and Resample

關於 resample 的具體用法, 大家還是可以按照上節課介紹的, 通過快捷鍵 shift+tab 檢視, 它的引數有很多種, 除了我們上面介紹的 M, W, Q, 還有 D, B 等等.

相關文章