pandasのlocは何の略か?語源と使い方を解説!

Pythonのデータ分析ライブラリであるpandasには、行・列のラベルに基づいてデータを選択・操作するためのlocという機能があります。このlocという名前は、location-based indexerの略語です。

locの機能

locは、行・列のラベルに基づいてデータを選択・操作するための機能です。たとえば、次のようなDataFrameがあるとします。

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': np.random.rand(5),
                   'B': np.random.rand(5),
                   'C': np.random.rand(5)},
                  index=['a', 'b', 'c', 'd', 'e'])
print(df)
          A         B         C
a  0.037679  0.245722  0.554390
b  0.731613  0.134751  0.263329
c  0.872822  0.722677  0.606783
d  0.496102  0.965236  0.413774
e  0.523986  0.317638  0.398561

このDataFrameの場合、行には’a’, ‘b’, ‘c’, ‘d’, ‘e’というラベルが付いています。locを使うと、これらのラベルを指定して、特定の行・列を選択することができます。たとえば、次のように書くことで、行bと列Bの値を取得できます。

print(df.loc['b', 'B'])
0.13475102921892128

また、行・列のラベルを指定せずにlocを使うと、全体を選択することができます。

print(df.loc[:, 'B'])
a    0.245722
b    0.134751
c    0.722677
d    0.965236
e    0.317638
Name: B, dtype: float64

このように、locはDataFrameの行・列にラベルが付いている場合に非常に便利です。

ilocとの違い

pandasには、行・列の整数インデックスに基づいてデータを選択・操作するためのilocという機能もあります。locとの違いは、行・列のラベルに基づくアクセスか、整数インデックスに基づくアクセスかという点です。

たとえば、次のようなDataFrameがあるとします。

df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10],
                   'C': [11, 12, 13, 14, 15]})
print(df)
   A   B   C
0  1   6  11
1  2   7  12
2  3   8  13
3  4   9  14
4  5  10  15

この場合、行・列にラベルが付いていないため、ilocを使って値を選択する必要があります。たとえば、次のように書くことで、行2と列1の値を取得できます。

print(df.iloc[2, 1])
8

このように、locとilocはそれぞれ違う用途に使われます。行・列にラベルが付いている場合はlocを、付いていない場合はilocを使うと良いでしょう。

locの使い方

基本的なlocの使い方を見ていきましょう。

まず、行・列のラベルを指定して、特定の行・列を選択する方法を見ていきます。次のようなDataFrameを考えます。

df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10],
                   'C': [11, 12, 13, 14, 15]},
                  index=['a', 'b', 'c', 'd', 'e'])
print(df)
   A   B   C
a  1   6  11
b  2   7  12
c  3   8  13
d  4   9  14
e  5  10  15

このDataFrameの場合、行には’a’, ‘b’, ‘c’, ‘d’, ‘e’というラベルが付いています。たとえば、次のように書くことで、行bと列Bの値を取得できます。

print(df.loc['b', 'B'])
7

行・列のラベルを指定せずにlocを使うと、全体を選択することができます。

print(df.loc[:, '
B'])
a     6
b     7
c     8
d     9
e    10
Name: B, dtype: int64

また、行を指定して、その行のすべての列を選択することもできます。

print(df.loc['b', :])
A     2
B     7
C    12
Name: b, dtype: int64

さらに、行・列のラベルをリストで指定して、特定の行・列を選択することもできます。

print(df.loc[['a', 'b'], ['B', 'C']])
   B   C
a  6  11
b  7  12

このように、locは行・列のラベルを指定して、柔軟にデータを選択・操作することができます。

応用的な使い方

locを使うと、複雑な条件でのデータの抽出・操作も可能です。

たとえば、次のようなDataFrameがあるとします。

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
                          'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three',
                          'two', 'two', 'one', 'three'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8)})
print(df)
     A      B         C         D
0  foo    one  0.598235  1.206421
1  bar    one  0.348689  0.447935
2  foo    two -0.712593 -1.443625
3  bar  three -0.058105  0.451837
4  foo    two -0.352787 -1.335089
5  bar    two -0.763819 -0.332059
6  foo    one  1.711455  0.076986
7  foo  three  0.003878 -0.129292

このDataFrameから、列Aが’foo’であり、列Bが’one’または’three’である行を選択するには、次のように書くことができます。

print(df.loc[(df['A'] == 'foo') & ((df['B'] == 'one') | (df['B'] == 'three'))])
     A      B         C         D
0  foo    one  1.170760  1.286219
6  foo    one  2.515714  1.402703
7  foo  three  0.680573 -0.324687

このように、locを使うと、複雑な条件でのデータの選択・操作が可能になります。

まとめ

pandasのlocは、行・列のラベルに基づいてデータを選択・操作するための機能であり、location-based indexerの略語です。locを使うことで、行・列にラベルが付いている場合に非常に便利にデータを選択・操作することができます。また、複雑な条件でのデータの選択・操作も可能です。

ilocとの違いについても理解しておくと良いでしょう。行・列にラベルが付いている場合はlocを、付いていない場合はilocを使うと良いです。

以上が、pandasのlocについての説明でした。