インデックス

import pandas as pd

df = pd.read_pickle("ftx_btc-rerp_20220306-20220312.pickle")
df.head()
startTime time open high low close volume
0 2022-03-09 20:00:00+00:00 2022-03-09 20:00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
1 2022-03-09 20:05:00+00:00 2022-03-09 20:05:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2 2022-03-09 20:10:00+00:00 2022-03-09 20:10:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
3 2022-03-09 20:15:00+00:00 2022-03-09 20:15:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
4 2022-03-09 20:20:00+00:00 2022-03-09 20:20:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06

locインデクサ

DataFrame.loc はDataFrameの要素に「ラベルから」アクセスするためのインデクサです。

loc[行のラベル, 列のラベル] の形式で要素を指定します。

注釈

行および列のラベルを「インデックス」と表記することもありますが、ここでは順序を表すインデックスと区別するため、「ラベル」と表記しています

df.loc[3, "open"]
42147.0

loc にはスライスやリストによる要素に指定ができます

df.loc[2:5, ["time", "volume"]]
time volume
2 2022-03-09 20:10:00 1.741020e+07
3 2022-03-09 20:15:00 8.337687e+06
4 2022-03-09 20:20:00 5.248858e+06
5 2022-03-09 20:25:00 3.678867e+06

ilocインデクサ

DataFrame.loc はDataFrameの要素に「順序から」アクセスするためのインデクサです。

loc[行の順序, 列の順序] の形式で要素を指定します。

df.iloc[3, 2]
42147.0
df.iloc[2:5, [1, -1]]
time volume
2 2022-03-09 20:10:00 1.741020e+07
3 2022-03-09 20:15:00 8.337687e+06
4 2022-03-09 20:20:00 5.248858e+06

DatetimeIndex

DatetimeIndex は時系列データに特化したインデックスです。日時を柔軟に指定して要素にアクセスできます。

set_index メソッドは指定した列をインデックスにします。

df.set_index("time", inplace=True)
df.head()
startTime open high low close volume
time
2022-03-09 20:00:00 2022-03-09 20:00:00+00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:15:00 2022-03-09 20:15:00+00:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
2022-03-09 20:20:00 2022-03-09 20:20:00+00:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06
df.index
DatetimeIndex(['2022-03-09 20:00:00', '2022-03-09 20:05:00',
               '2022-03-09 20:10:00', '2022-03-09 20:15:00',
               '2022-03-09 20:20:00', '2022-03-09 20:25:00',
               '2022-03-09 20:30:00', '2022-03-09 20:35:00',
               '2022-03-09 20:40:00', '2022-03-09 20:45:00',
               ...
               '2022-03-15 00:10:00', '2022-03-15 00:15:00',
               '2022-03-15 00:20:00', '2022-03-15 00:25:00',
               '2022-03-15 00:30:00', '2022-03-15 00:35:00',
               '2022-03-15 00:40:00', '2022-03-15 00:45:00',
               '2022-03-15 00:50:00', '2022-03-15 00:55:00'],
              dtype='datetime64[ns]', name='time', length=1500, freq=None)

datetime型やtime型による指定ができます。

import datetime

df.loc[datetime.datetime(2022, 3, 9, 20), "volume"]
4986934.9804
df.loc[datetime.time(20, 0), :]
startTime open high low close volume
time
2022-03-09 20:00:00 2022-03-09 20:00:00+00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
2022-03-10 20:00:00 2022-03-10 20:00:00+00:00 39437.0 39455.0 39372.0 39402.0 7.649057e+06
2022-03-11 20:00:00 2022-03-11 20:00:00+00:00 38797.0 38837.0 38759.0 38787.0 7.301834e+06
2022-03-12 20:00:00 2022-03-12 20:00:00+00:00 39031.0 39055.0 38991.0 39010.0 2.578932e+06
2022-03-13 20:00:00 2022-03-13 20:00:00+00:00 38865.0 38866.0 38738.0 38774.0 1.995891e+07
2022-03-14 20:00:00 2022-03-14 20:00:00+00:00 38824.0 38920.0 38808.0 38904.0 1.423804e+07
df.loc[pd.Timestamp("2022-03-09 20:00"), :]
startTime    2022-03-09 20:00:00+00:00
open                           42229.0
high                           42271.0
low                            42228.0
close                          42254.0
volume                    4986934.9804
Name: 2022-03-09 20:00:00, dtype: object

文字列による指定もできます。

# 2022年3月9日20時0分
df.loc["2022-03-09 20:00", :]
startTime    2022-03-09 20:00:00+00:00
open                           42229.0
high                           42271.0
low                            42228.0
close                          42254.0
volume                    4986934.9804
Name: 2022-03-09 20:00:00, dtype: object
# 2022年3月9日
df.loc["2022-03-09", :].head()
startTime open high low close volume
time
2022-03-09 20:00:00 2022-03-09 20:00:00+00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:15:00 2022-03-09 20:15:00+00:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
2022-03-09 20:20:00 2022-03-09 20:20:00+00:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06
df.loc["2022-03-09", :].tail()
startTime open high low close volume
time
2022-03-09 23:35:00 2022-03-09 23:35:00+00:00 42128.0 42150.0 42043.0 42043.0 3.064221e+07
2022-03-09 23:40:00 2022-03-09 23:40:00+00:00 42043.0 42062.0 41971.0 42041.0 7.510289e+06
2022-03-09 23:45:00 2022-03-09 23:45:00+00:00 42041.0 42083.0 41990.0 42003.0 5.706220e+06
2022-03-09 23:50:00 2022-03-09 23:50:00+00:00 42003.0 42019.0 41975.0 41997.0 3.546661e+06
2022-03-09 23:55:00 2022-03-09 23:55:00+00:00 41997.0 42033.0 41943.0 41960.0 9.030276e+06
# 2022年3月
df.loc["2022-03", :].head()
startTime open high low close volume
time
2022-03-09 20:00:00 2022-03-09 20:00:00+00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:15:00 2022-03-09 20:15:00+00:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
2022-03-09 20:20:00 2022-03-09 20:20:00+00:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06
df.loc["2022-03", :].tail()
startTime open high low close volume
time
2022-03-15 00:35:00 2022-03-15 00:35:00+00:00 39558.0 39562.0 39460.0 39481.0 7.827251e+06
2022-03-15 00:40:00 2022-03-15 00:40:00+00:00 39481.0 39574.0 39469.0 39567.0 5.586437e+06
2022-03-15 00:45:00 2022-03-15 00:45:00+00:00 39567.0 39614.0 39505.0 39506.0 9.568077e+06
2022-03-15 00:50:00 2022-03-15 00:50:00+00:00 39506.0 39548.0 39506.0 39531.0 3.365713e+06
2022-03-15 00:55:00 2022-03-15 00:55:00+00:00 39535.0 39580.0 39532.0 39571.0 2.119015e+06
df.loc["2022-03-10 13:00":"2022-03-11 03:00", :]
startTime open high low close volume
time
2022-03-10 13:00:00 2022-03-10 13:00:00+00:00 39262.0 39311.0 39246.0 39281.0 1.068628e+07
2022-03-10 13:05:00 2022-03-10 13:05:00+00:00 39281.0 39284.0 39201.0 39216.0 7.875157e+06
2022-03-10 13:10:00 2022-03-10 13:10:00+00:00 39216.0 39265.0 39213.0 39243.0 7.673845e+06
2022-03-10 13:15:00 2022-03-10 13:15:00+00:00 39243.0 39326.0 39236.0 39307.0 1.134806e+07
2022-03-10 13:20:00 2022-03-10 13:20:00+00:00 39307.0 39342.0 39273.0 39309.0 1.251940e+07
... ... ... ... ... ... ...
2022-03-11 02:40:00 2022-03-11 02:40:00+00:00 38407.0 38435.0 38369.0 38377.0 4.307957e+06
2022-03-11 02:45:00 2022-03-11 02:45:00+00:00 38377.0 38415.0 38364.0 38373.0 4.826126e+06
2022-03-11 02:50:00 2022-03-11 02:50:00+00:00 38373.0 38455.0 38243.0 38426.0 1.326355e+07
2022-03-11 02:55:00 2022-03-11 02:55:00+00:00 38426.0 38451.0 38240.0 38292.0 1.406263e+07
2022-03-11 03:00:00 2022-03-11 03:00:00+00:00 38292.0 38420.0 38272.0 38336.0 1.442301e+07

169 rows × 6 columns

# 10時から11時
df.between_time("10:00", "11:00")
startTime open high low close volume
time
2022-03-10 10:00:00 2022-03-10 10:00:00+00:00 39161.0 39232.0 39122.0 39224.0 1.232851e+07
2022-03-10 10:05:00 2022-03-10 10:05:00+00:00 39224.0 39238.0 39172.0 39202.0 9.854052e+06
2022-03-10 10:10:00 2022-03-10 10:10:00+00:00 39202.0 39238.0 39159.0 39220.0 9.966978e+06
2022-03-10 10:15:00 2022-03-10 10:15:00+00:00 39220.0 39234.0 39144.0 39205.0 9.997023e+06
2022-03-10 10:20:00 2022-03-10 10:20:00+00:00 39205.0 39246.0 39175.0 39202.0 8.136784e+06
... ... ... ... ... ... ...
2022-03-14 10:40:00 2022-03-14 10:40:00+00:00 39015.0 39079.0 38988.0 39040.0 9.049719e+06
2022-03-14 10:45:00 2022-03-14 10:45:00+00:00 39040.0 39048.0 39016.0 39025.0 4.972424e+06
2022-03-14 10:50:00 2022-03-14 10:50:00+00:00 39025.0 39096.0 39022.0 39089.0 2.936812e+06
2022-03-14 10:55:00 2022-03-14 10:55:00+00:00 39089.0 39134.0 39072.0 39112.0 4.526722e+06
2022-03-14 11:00:00 2022-03-14 11:00:00+00:00 39112.0 39133.0 39066.0 39066.0 4.075655e+06

65 rows × 6 columns

ブールインデックス

SeriesやDataFrameに対して比較演算すると、ブール値が返ります。

df.loc[:, "volume"] > 1e+7
time
2022-03-09 20:00:00    False
2022-03-09 20:05:00     True
2022-03-09 20:10:00     True
2022-03-09 20:15:00    False
2022-03-09 20:20:00    False
                       ...  
2022-03-15 00:35:00    False
2022-03-15 00:40:00    False
2022-03-15 00:45:00    False
2022-03-15 00:50:00    False
2022-03-15 00:55:00    False
Name: volume, Length: 1500, dtype: bool

locにブール値を指定することで、Trueの要素に対してアクセスできます。

df.loc[df.loc[:, "volume"] > 1e+7, :]
startTime open high low close volume
time
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:40:00 2022-03-09 20:40:00+00:00 41947.0 41993.0 41826.0 41850.0 1.928753e+07
2022-03-09 20:50:00 2022-03-09 20:50:00+00:00 41877.0 41920.0 41724.0 41865.0 2.270338e+07
2022-03-09 21:05:00 2022-03-09 21:05:00+00:00 41897.0 41968.0 41819.0 41822.0 1.060387e+07
... ... ... ... ... ... ...
2022-03-14 23:55:00 2022-03-14 23:55:00+00:00 39620.0 39731.0 39614.0 39689.0 1.003464e+07
2022-03-15 00:00:00 2022-03-15 00:00:00+00:00 39689.0 39835.0 39608.0 39700.0 5.662910e+07
2022-03-15 00:05:00 2022-03-15 00:05:00+00:00 39700.0 39759.0 39647.0 39718.0 1.092920e+07
2022-03-15 00:10:00 2022-03-15 00:10:00+00:00 39718.0 39734.0 39552.0 39555.0 1.141035e+07
2022-03-15 00:15:00 2022-03-15 00:15:00+00:00 39555.0 39555.0 39383.0 39451.0 2.928895e+07

492 rows × 6 columns

要素の変更

インデックスで指定した要素に対して代入すると、値が変更されます。

df.loc["2022-03-09 20:00", "volume"] = 0
df.head()
startTime open high low close volume
time
2022-03-09 20:00:00 2022-03-09 20:00:00+00:00 42229.0 42271.0 42228.0 42254.0 0.000000e+00
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:15:00 2022-03-09 20:15:00+00:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
2022-03-09 20:20:00 2022-03-09 20:20:00+00:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06
df.loc["2022-03-09 20:00", :] = 0
df.head()
startTime open high low close volume
time
2022-03-09 20:00:00 0 0.0 0.0 0.0 0.0 0.000000e+00
2022-03-09 20:05:00 2022-03-09 20:05:00+00:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2022-03-09 20:10:00 2022-03-09 20:10:00+00:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
2022-03-09 20:15:00 2022-03-09 20:15:00+00:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
2022-03-09 20:20:00 2022-03-09 20:20:00+00:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06