pandasのiloc使用法

Pythonにおけるデータ解析支援機能を提供するpandasのiloc使用法についてご紹介します。

pandasのilocは、csvデータ読み込み後、必要データを抽出するのに便利です。

条件

  • Python 3.7.0
  • pandas 0.25.3

ilocとは

ilocは、DataFrameやSeriesから指定したインデックスのデータを抽出することが出来ます。

主に整数で位置を指定しますが、boolean配列を用いた指定方法もあります。

サンプルデータ

日経平均株価の時系列データをサンプルとして扱います。
当該データは、nikkei.csvというCSVファイルに保存されているものとします。
(csvファイルのエンコードはSJISであるものとします。)

日付,始値,高値,安値,終値
2019年11月5日,23118.79,23328.52,23090.94,23251.99
2019年11月1日,22730.49,22852.72,22705.6,22850.77
2019年10月31日,22910.1,22988.8,22875.5,22927.04
2019年10月30日,22953.17,22961.23,22827.93,22843.12
2019年10月29日,22950.79,23008.43,22935.35,22974.13
2019年10月28日,22854.44,22896.22,22830.57,22867.27
2019年10月25日,22753.24,22819.92,22715.13,22799.81
2019年10月24日,22725.44,22780.99,22704.33,22750.6
2019年10月23日,22619.77,22648.81,22457.89,22625.38
2019年10月21日,22541.22,22581.28,22515.73,22548.9
2019年10月18日,22528.56,22649.85,22466.26,22492.68
2019年10月17日,22451.15,22522.39,22424.92,22451.86
2019年10月16日,22479.57,22615.47,22434.35,22472.92
2019年10月15日,22063.71,22219.63,22049.71,22207.21
2019年10月11日,21749.93,21820.77,21658.27,21798.87
2019年10月10日,21456.27,21601.46,21308.88,21551.98
2019年10月9日,21359.84,21467.77,21359.84,21456.38
2019年10月8日,21494.48,21629.24,21483.18,21587.78
2019年10月7日,21445.73,21475.28,21328.26,21375.25
2019年10月4日,21316.18,21410.2,21276.01,21410.2

サンプルプログラム

csvファイル読み込み

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df)

実行結果

csvデータ全体が出力されます。

             日付        始値        高値        安値        終値
0    2019年11月5日  23118.79  23328.52  23090.94  23251.99
1    2019年11月1日  22730.49  22852.72  22705.60  22850.77
2   2019年10月31日  22910.10  22988.80  22875.50  22927.04
3   2019年10月30日  22953.17  22961.23  22827.93  22843.12
4   2019年10月29日  22950.79  23008.43  22935.35  22974.13
5   2019年10月28日  22854.44  22896.22  22830.57  22867.27
6   2019年10月25日  22753.24  22819.92  22715.13  22799.81
7   2019年10月24日  22725.44  22780.99  22704.33  22750.60
8   2019年10月23日  22619.77  22648.81  22457.89  22625.38
9   2019年10月21日  22541.22  22581.28  22515.73  22548.90
10  2019年10月18日  22528.56  22649.85  22466.26  22492.68
11  2019年10月17日  22451.15  22522.39  22424.92  22451.86
12  2019年10月16日  22479.57  22615.47  22434.35  22472.92
13  2019年10月15日  22063.71  22219.63  22049.71  22207.21
14  2019年10月11日  21749.93  21820.77  21658.27  21798.87
15  2019年10月10日  21456.27  21601.46  21308.88  21551.98
16   2019年10月9日  21359.84  21467.77  21359.84  21456.38
17   2019年10月8日  21494.48  21629.24  21483.18  21587.78
18   2019年10月7日  21445.73  21475.28  21328.26  21375.25
19   2019年10月4日  21316.18  21410.20  21276.01  21410.20

整数での位置指定

ソース

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[2])

実行結果

ヘッダーと共に、指定した数値の行(ヘッダーを除いて0から開始)が抽出されます。

日付    2019年10月31日
始値        22910.1
高値        22988.8
安値        22875.5
終値          22927
Name: 2, dtype: object

整数リストでの位置指定

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[[0, 3]])

実行結果

ヘッダーと共に、リストで指定した数値の行(ヘッダーを除いて0から開始)が抽出されます。
ここでは、リストで0および3を指定したため、0および3の行が抽出されています。

            日付        始値        高値        安値        終値
0   2019年11月5日  23118.79  23328.52  23090.94  23251.99
3  2019年10月30日  22953.17  22961.23  22827.93  22843.12

整数リストでの位置指定(スライス)

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[:5])

実行結果

スライス(0~4の5行)指定でもデータを抽出することが出来ます。

            日付        始値        高値        安値        終値
0   2019年11月5日  23118.79  23328.52  23090.94  23251.99
1   2019年11月1日  22730.49  22852.72  22705.60  22850.77
2  2019年10月31日  22910.10  22988.80  22875.50  22927.04
3  2019年10月30日  22953.17  22961.23  22827.93  22843.12
4  2019年10月29日  22950.79  23008.43  22935.35  22974.13

booleanリストでの位置指定

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[[True, False, True, False, False, False, False, False, False, False
               , False, False, False, False, False, False, False, False, False, True]])

実行結果

Trueが指定された行のみが抽出されていることがわかります。

             日付        始値        高値        安値        終値
0    2019年11月5日  23118.79  23328.52  23090.94  23251.99
2   2019年10月31日  22910.10  22988.80  22875.50  22927.04
19   2019年10月4日  21316.18  21410.20  21276.01  21410.20

booleanリストでの位置指定(lambda)

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[lambda x: x.index % 2 == 1])

実行結果

lambdaを使用すると、奇数行のみの抽出も簡単にできます。

             日付        始値        高値        安値        終値
1    2019年11月1日  22730.49  22852.72  22705.60  22850.77
3   2019年10月30日  22953.17  22961.23  22827.93  22843.12
5   2019年10月28日  22854.44  22896.22  22830.57  22867.27
7   2019年10月24日  22725.44  22780.99  22704.33  22750.60
9   2019年10月21日  22541.22  22581.28  22515.73  22548.90
11  2019年10月17日  22451.15  22522.39  22424.92  22451.86
13  2019年10月15日  22063.71  22219.63  22049.71  22207.21
15  2019年10月10日  21456.27  21601.46  21308.88  21551.98
17   2019年10月8日  21494.48  21629.24  21483.18  21587.78
19   2019年10月4日  21316.18  21410.20  21276.01  21410.20

スライスで行と列指定

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[1:5, 0:4])

実行結果

スライスで指定した範囲の値を抽出することが出来ます。

  • 行:1:5 ⇒ 1~4行
  • 列:0:4 ⇒ 0~3列
            日付        始値        高値        安値
1   2019年11月1日  22730.49  22852.72  22705.60
2  2019年10月31日  22910.10  22988.80  22875.50
3  2019年10月30日  22953.17  22961.23  22827.93
4  2019年10月29日  22950.79  23008.43  22935.35

スライスを用いて列指定

ソース

import pandas as pd

df = pd.read_csv('nikkei.csv', encoding="shift_jis") # csvファイル読み込み
print(df.iloc[:, 4])

実行結果

指定した列(0から開始して4)のみ抽出することが出来ます。

0     23251.99
1     22850.77
2     22927.04
3     22843.12
4     22974.13
5     22867.27
6     22799.81
7     22750.60
8     22625.38
9     22548.90
10    22492.68
11    22451.86
12    22472.92
13    22207.21
14    21798.87
15    21551.98
16    21456.38
17    21587.78
18    21375.25
19    21410.20
Name: 終値, dtype: float64

参考

pandas.DataFrame.iloc

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html?highlight=iloc#pandas.DataFrame.iloc

Qiita:Pythonのlambdaって分かりやすい

https://qiita.com/nagataaaas/items/531b1fc5ce42a791c7df

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です