スポンサーリンク
pandasで年末と年初の行を抽出
indexがdatetime型のDataFrameを作成
indexがdatetime型のDataFrameを作成する必要があります。
例えば、下記のようにcsvデータを読み込んで、indexがdatetime型にします。
参考:pandas.read_csv()のindex_colの指定とparse_dates=Trueで、インデックスの列をdatetime型に変換
1 2 3 4 |
data = pd.read_csv('in.txt', names=('Date', 'Value'), index_col='Date', parse_dates=True) |
スポンサーリンク
DataFrame.resample()で行を抽出
続いて、DataFrame.resample()で行を抽出します。
年単位で行を抽出する場合にはresample()の引数に、'A' もしくは 'AS' を指定します。
'AS' indexは年初の日付
'A' indexは年末の日付
更に、その年の最初の日付の行を抽出するにはfirst()を、その年の最後の行を抽出するにはlast()を使います。
DataFrame.resample().first() その年の最初の日付の行を抽出
DataFrame.resample().last() その年の最後の日付の行を抽出
年単位でその年の最初(年初)の行を抽出して出力
1 2 3 4 5 |
#indexは年初の日付:年単位でその年の最初の行を抽出して出力 DataFrame.resample('AS').first() #indexは年末の日付:年単位でその年の最初の行を抽出して出力 DataFrame.resample('A').first() |
年単位でその年の最後(年末)の行を抽出して出力
1 2 3 4 5 |
#indexは年初の日付:年単位でその年の最後の行を抽出して出力 DataFrame.resample('AS').last() #indexは年末の日付:年単位でその年の最後の行を抽出して出力 DataFrame.resample('A').last() |
サンプルコード
下記がサンプルコードになります。
in.txtが下記のようにあったとします。
1 2 3 4 5 6 7 8 9 10 |
$ cat in.txt 20160105,0 20160402,1 20161231,2 20170101,3 20170406,4 20171221,5 20180102,6 20180406,7 20181230,8 |
下記がサンプルコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ cat sample.py #!/usr/bin/env python3 # coding: UTF-8 import pandas as pd data = pd.read_csv('in.txt', names=('Date', 'Value'), index_col='Date', parse_dates=True) print("dataの中身を出力") print (data) print("indexは年初の日付:年単位でその年の最初の行を抽出して出力") print(data.resample('AS').first()) print("indexは年初の日付:年単位でその年の最後の行を抽出して出力") print(data.resample('AS').last()) print("indexは年末の日付:年単位でその年の最初の行を抽出して出力") print(data.resample('A').first()) print("indexは年末の日付:年単位でその年の最後の行を抽出して出力") print(data.resample('A').last()) |
下記が実行結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$ ./sample.py dataの中身を出力 Value Date 2016-01-05 0 2016-04-02 1 2016-12-31 2 2017-01-01 3 2017-04-06 4 2017-12-21 5 2018-01-02 6 2018-04-06 7 2018-12-30 8 indexは年初の日付:年単位でその年の最初の行を抽出して出力 Value Date 2016-01-01 0 2017-01-01 3 2018-01-01 6 indexは年初の日付:年単位でその年の最後の行を抽出して出力 Value Date 2016-01-01 2 2017-01-01 5 2018-01-01 8 indexは年末の日付:年単位でその年の最初の行を抽出して出力 Value Date 2016-12-31 0 2017-12-31 3 2018-12-31 6 indexは年末の日付:年単位でその年の最後の行を抽出して出力 Value Date 2016-12-31 2 2017-12-31 5 2018-12-31 8 |
スポンサーリンク