pandasで行・列を指定して操作!データフレームの基本と実践技術(loc、iloc、at)

はじめに

pandasは、Pythonのライブラリの1つで、データ分析に欠かせないツールです。pandasを使用することで、大量のデータを効率的に扱うことができます。この記事では、pandasを用いた行・列の指定方法について解説します。

行の指定方法:ラベルとインデックスによる選択

pandasでは、行をラベルまたはインデックスを指定して選択することができます。

# ラベルを指定して行を選択する
df.loc['行ラベル']

# インデックスを指定して行を選択する
df.iloc[行インデックス]

以下は、行ラベルと行インデックスを指定して、行を選択する例です。

# データフレームを作成する
import pandas as pd
df = pd.DataFrame({'名前': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'],
                    '数学': [90, 80, 70, 60, 50],
                    '英語': [70, 80, 90, 60, 50]},
                  index=['001', '002', '003', '004', '005'])
# 行ラベルを指定して行を選択する
print(df.loc['003'])
# 行インデックスを指定して行を選択する
print(df.iloc[2])

上記のコードを実行すると、以下のように行が選択されます。

#

名前    Cさん
 数学      70
 英語      90
Name: 003, dtype: object
 名前    Cさん
 数学      70
 英語      90
Name: 003, dtype: object

列の指定方法:ラベルとインデックスによる選択

pandasでは、列をラベルまたはインデックスを指定して選択することができます。

# ラベルを指定して列を選択する
df['列ラベル']
# インデックスを指定して列を選択する
df.iloc[:, 列インデックス]

以下は、列ラベルと列インデックスを指定して、列を選択する例です。

# データフレームを作成する
import pandas as pd
df = pd.DataFrame({'名前': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'],
                   '数学': [90, 80, 70, 60, 50],
                   '英語': [70, 80, 90, 60, 50]},
                   index=['001', '002', '003', '004', '005'])

# 列ラベルを指定して列を選択する
print(df['数学'])
# 列インデックスを指定して列を選択する
print(df.iloc[:, 1])

上記のコードを実行すると、以下のように列が選択されます。

001    90
002    80
003    70
004    60
005    50
# Name: 数学, dtype: int64
001    90
002    80
003    70
004    60
005    50
# Name: 数学, dtype: int64

複数行・列の指定と組み合わせ操作

pandasでは、複数の行や列を指定して選択することができます。また、複数の選択条件を組み合わせて、データフレームの操作を行うこともできます。

# 複数の行を選択する
df.loc[['行ラベル1', '行ラベル2']]

# 複数の列を選択する
df[['列ラベル1', '列ラベル2']]

# 複数の行と列を選択する
df.loc[['行ラベル1', '行ラベル2'], ['列ラベル1', '列ラベル2']]

# 条件を指定してデータを選択する
df[df['数学'] > 80]

以下は、複数の行や列を指定して、データフレームの操作を行う例です。

# データフレームを作成する
import pandas as pd
df = pd.DataFrame({'名前': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'],
                    '数学': [90, 80, 70, 60, 50],
                    '英語': [70, 80, 90, 60, 50]},
                  index=['001', '002', '003', '004', '005'])

# 複数の行と列を選択する
print(df.loc[['001', '003'], ['名前', '数学']])

# 条件を指定してデータを選択する
print(df[df['数学'] > 80])

上記のコードを実行すると、以下のようにデータが選択されます。

     名前  数学
 001 Aさん 90
 003 Cさん 70
 名前 数学 英語
 001 Aさん 90 70

データフレーム内の要素へのアクセスと操作

pandasでは、データフレーム内の要素に対して、様々な操作を行うことができます。

# 要素の値を取得する
df.at['行ラベル', '列ラベル']

# 要素の値を変更する
df.at['行ラベル', '列ラベル'] = 値

# 複数の要素を一括で変更する
df.loc[['行ラベル1', '行ラベル2'], ['列ラベル1', '列ラベル2']] = [[値1, 値2], [値3, 値4]]

# 要素の値に対して関数を適用する
df['数学'] = df['数学'].apply(lambda x: x * 2)

以下は、データフレーム内の要素に対して操作を行う例です。

# データフレームを作成する
import pandas as pd
df = pd.DataFrame({'名前': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'],
                    '数学': [90, 80, 70, 60, 50],
                    '英語': [70, 80, 90, 60, 50]},
                  index=['001', '002', '003', '004', '005'])

# 要素の値を取得する
print(df.at['003', '数学'])

# 要素の値を変更する
df.at['003', '数学'] = 75
print(df)

# 複数の要素を一括で変更する
df.loc[['001', '003'], ['数学', '英語']] = [[95, 75], [75, 85]]
print(df)

# 要素の値に対して関数を適用する
df['数学'] = df['数学'].apply(lambda x: x * 2)
print(df)

上記のコードを実行すると、以下のようにデータが操作されます。

70
       名前  数学  英語
 001  Aさん  90  70
 002  Bさん  80  80
 003  Cさん  75  90
 004  Dさん  60  60
 005  Eさん  50  50
       名前  数学  英語
 001  Aさん  95  75
 002  Bさん  80  80
 003  Cさん  75  85
 004  Dさん  60  60
 005  Eさん  50  50
       名前   数学  英語
 001 Aさん 190 75
 002 Bさん 160 80
 003 Cさん 150 85
 004 Dさん 120 60
 005 Eさん 100 50

まとめ

pandasを使用することで、データフレームの行・列の指定や、複数の条件を組み合わせた操作、要素に対するアクセスや操作が簡単に行えます。この記事を参考にして、pandasを活用してデータ分析を行ってみてください。