【pandas】locメソッド:DataFrameの行・列を指定して抽出

DataFrameのlocメソッドについて簡潔にまとめました.
以下のような操作を行っています.

  • 特定の行を抽出したい
  • 2列目と3列目だけが見たい
  • 5行目以降の4列目が見たい

公式 Reference: pandas.DataFrame.loc

locメソッド

locメソッドはDataFrameの行・列の名前を指定して抽出する関数です.
以下の図は行・列(または行・列両方)を指定した際の範囲を示しています.

最初はあやふやになりますよね.
行・列の範囲をイメージしながらコードを見ていきましょう.

コードの書き方

まずはサンプルのDataFrameを作成します.


# DataFrameの作成
import pandas as pd

df = pd.DataFrame([[100, 300, 30000], [300, 50, 15000], [1000, 20, 20000]],
                  index = ['いか', 'えび', 'かに'], 
                  columns = ['単価', '数量', '総額'])
df
単価 数量 総額
いか 100 300 30000
えび 300 50 15000
かに 1000 20 20000

行の抽出(行の名前を指定)

locメソッドを用いて,行の名前を指定します.
これで「いか・えび」の行だけが抽出できます.


df.loc[['いか', 'えび']]
単価 数量 総額
いか 100 300 30000
えび 300 50 15000

列の抽出(列の名前を指定)

次は列の名前で指定してみましょう.
これで「単価・総額」列の全行が抽出できます.


# 列を指定したい
df.loc[:, ['単価', '総額']]
単価 総額
いか 100 30000
えび 300 15000
かに 1000 20000

参考

[]内の:,は「すべての行」を指定するために必要です.

行・列の指定

さらに行・列の名前を同時に指定してみましょう.
「えび・かに」行の「単価」列だけが抽出できます.


# 行・列の指定
df.loc[['えび', 'かに'], ['単価']]
単価
えび 300
かに 1000

booleanでも指定ができる

locメソッドは行や列の名前だけでなく,boolean(=TrueorFalse)でも指定ができます.
これはTrueとなっている行(または列)を抽出できるということです.
早速見てみましょう.


# Trueである行を抽出
df.loc[[False, True, False]]
単価 数量 総額
えび 300 50 15000

今回は行の数が3つなので,各行に対してTrueorFalseを指定しています.
※ 行数が指定するTrueFalseの数と一致しないとエラーが出ます.1

参考

以下のようにすれば列を boolean で指定することも可能です.


df.loc[:, [False, True, False]]

上記のコードを実行するとTrueの列である「数量」列が抽出されます.
なお,行・列の同時指定もできます.

ひとこと

DataFrameは慣れるまでは結構ややこしいですよね.
他にも行・列の番号で指定するilocメソッドなど,様々な関数があるので興味のある方は調べてみるといいと思います.


  1. 例えば df.loc[[False, True]] は行数3に対して2つしかTrueFalseを指定していないのでエラーが出ます.