Pandas

[Python] Pandas – 行と列を取得するloc()の使い方

Pandasのloc()は、ラベルベースでデータフレームの行や列を取得するためのメソッドです。

行や列のラベル名を指定してデータを抽出できます。

基本的な使い方はdf.loc[行ラベル, 列ラベル]です。

行ラベルにはスライスやリストも使用可能で、列ラベルも同様に指定できます。

例えば、df.loc[2, 'name']は2行目の’name’列の値を取得し、df.loc[:, 'age']は全行の’age’列を取得します。

loc()の基本的な使い方

Pandasのloc()メソッドは、データフレームから行や列をラベルベースで取得するための非常に便利な機能です。

ここでは、loc()の基本的な使い方を詳しく解説します。

行を取得する方法

loc[]を使って特定の行を取得するには、行のラベルを指定します。

以下のサンプルコードでは、データフレームから特定の行を取得する方法を示します。

import pandas as pd
# サンプルデータの作成
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [28, 34, 22],
    '職業': ['エンジニア', 'デザイナー', 'マーケティング']
}
df = pd.DataFrame(data)
# 行を取得
row = df.loc[1]  # 鈴木の行を取得
print(row)
名前         鈴木
年齢          34
職業    デザイナー
Name: 1, dtype: object

列を取得する方法

列を取得する場合も、loc[]を使用しますが、列名を指定します。

以下のサンプルコードでは、特定の列を取得する方法を示します。

# 列を取得
column = df.loc[:, '年齢']  # 年齢列を取得
print(column)
0    28
1    34
2    22
Name: 年齢, dtype: int64

行と列を同時に取得する方法

行と列を同時に取得することも可能です。

以下のサンプルコードでは、特定の行と列を同時に取得する方法を示します。

# 行と列を同時に取得
value = df.loc[1, '職業']  # 鈴木の職業を取得
print(value)
デザイナー

スライスを使った行・列の取得

loc[]ではスライスを使って複数の行や列を取得することもできます。

以下のサンプルコードでは、スライスを使った取得方法を示します。

# スライスを使った行の取得
rows = df.loc[0:1]  # 0行目から1行目までを取得
print(rows)
名前  年齢         職業
0  田中  28      エンジニア
1  鈴木  34     デザイナー

特定の条件に基づく行・列の取得

条件を指定して行を取得することも可能です。

以下のサンプルコードでは、年齢が30歳以上の行を取得する方法を示します。

# 特定の条件に基づく行の取得
filtered_rows = df.loc[df['年齢'] >= 30]  # 年齢が30以上の行を取得
print(filtered_rows)
名前  年齢         職業
1  鈴木  34     デザイナー

これらの基本的な使い方を理解することで、Pandasのデータフレームをより効果的に操作できるようになります。

loc()を使ったデータの操作

Pandasのloc()メソッドは、データの取得だけでなく、データの更新や新しい列の追加にも利用できます。

ここでは、loc()を使ったデータの操作方法について詳しく解説します。

データの更新

loc[]を使って特定のセルのデータを更新することができます。

以下のサンプルコードでは、特定の行と列のデータを更新する方法を示します。

import pandas as pd
# サンプルデータの作成
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [28, 34, 22],
    '職業': ['エンジニア', 'デザイナー', 'マーケティング']
}
df = pd.DataFrame(data)
# データの更新
df.loc[0, '年齢'] = 29  # 田中の年齢を29に更新
print(df)
名前  年齢         職業
0  田中  29      エンジニア
1  鈴木  34     デザイナー
2  佐藤  22  マーケティング

新しい列の追加

loc[]を使って新しい列を追加することもできます。

以下のサンプルコードでは、新しい列「給与」を追加する方法を示します。

# 新しい列の追加
df.loc[:, '給与'] = [500000, 600000, 400000]  # 各社員の給与を追加
print(df)
名前  年齢         職業      給与
0  田中  29      エンジニア  500000
1  鈴木  34     デザイナー  600000
2  佐藤  22  マーケティング  400000

特定の条件に基づくデータの更新

特定の条件に基づいてデータを更新することも可能です。

以下のサンプルコードでは、年齢が30歳以上の人の職業を「シニア」に更新する方法を示します。

# 特定の条件に基づくデータの更新
df.loc[df['年齢'] >= 30, '職業'] = 'シニア'  # 年齢が30以上の職業を「シニア」に更新
print(df)
名前  年齢      職業      給与
0  田中  29   エンジニア  500000
1  鈴木  34       シニア  600000
2  佐藤  22  マーケティング  400000

複数の条件を使ったデータの操作

複数の条件を組み合わせてデータを操作することもできます。

以下のサンプルコードでは、年齢が30歳以上かつ給与が500000以上の人の名前を「更新済み」に変更する方法を示します。

# 複数の条件を使ったデータの操作
df.loc[(df['年齢'] >= 30) & (df['給与'] >= 500000), '名前'] = '更新済み'
print(df)
名前  年齢      職業      給与
0   田中  29   エンジニア  500000
1  更新済み  34       シニア  600000
2   佐藤  22  マーケティング  400000

これらの操作を通じて、Pandasのデータフレームを柔軟に操作し、必要なデータを効率的に管理することができます。

loc()を使った応用例

Pandasのloc()メソッドは、データの取得や操作において非常に強力なツールです。

ここでは、loc()を使った応用例をいくつか紹介します。

複数の列を同時に取得する

loc[]を使って複数の列を同時に取得することができます。

以下のサンプルコードでは、名前と職業の列を同時に取得する方法を示します。

import pandas as pd
# サンプルデータの作成
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [28, 34, 22],
    '職業': ['エンジニア', 'デザイナー', 'マーケティング']
}
df = pd.DataFrame(data)
# 複数の列を同時に取得
selected_columns = df.loc[:, ['名前', '職業']]
print(selected_columns)
名前         職業
0  田中      エンジニア
1  鈴木     デザイナー
2  佐藤  マーケティング

複数の条件を使ったフィルタリング

複数の条件を組み合わせてデータをフィルタリングすることも可能です。

以下のサンプルコードでは、年齢が30歳以上かつ職業が「デザイナー」の行を取得します。

# 複数の条件を使ったフィルタリング
filtered_data = df.loc[(df['年齢'] >= 30) & (df['職業'] == 'デザイナー')]
print(filtered_data)
名前  年齢      職業
1  鈴木  34     デザイナー

特定の値を持つ行の抽出

特定の値を持つ行を抽出することもできます。

以下のサンプルコードでは、職業が「エンジニア」の行を取得します。

# 特定の値を持つ行の抽出
engineer_rows = df.loc[df['職業'] == 'エンジニア']
print(engineer_rows)
名前  年齢      職業
0  田中  28   エンジニア

特定の範囲のデータを取得する

loc[]を使って特定の範囲のデータを取得することも可能です。

以下のサンプルコードでは、年齢が25歳以上30歳未満の行を取得します。

# 特定の範囲のデータを取得
range_data = df.loc[(df['年齢'] >= 25) & (df['年齢'] < 30)]
print(range_data)
名前  年齢         職業
0  田中  28      エンジニア

loc()と他のPandasメソッドの組み合わせ

loc()は他のPandasメソッドと組み合わせて使うことで、さらに強力なデータ操作が可能です。

以下のサンプルコードでは、loc()を使ってフィルタリングした後、mean()メソッドを使って年齢の平均を計算します。

# loc()と他のPandasメソッドの組み合わせ
average_age = df.loc[df['職業'] == 'エンジニア', '年齢'].mean()
print(f"エンジニアの平均年齢: {average_age}")
エンジニアの平均年齢: 28.0

これらの応用例を通じて、loc()メソッドの柔軟性と強力さを理解し、データフレームの操作をより効率的に行えるようになります。

loc()を使う際の注意点

Pandasのloc()メソッドは非常に便利ですが、使用する際にはいくつかの注意点があります。

ここでは、loc()を使う際の注意点について詳しく解説します。

行や列が存在しない場合のエラー

loc[]を使用して存在しない行や列を指定すると、KeyErrorが発生します。

以下のサンプルコードでは、存在しない行を指定した場合のエラーを示します。

import pandas as pd
# サンプルデータの作成
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [28, 34, 22]
}
df = pd.DataFrame(data)
# 存在しない行を指定
try:
    row = df.loc[3]  # 存在しない行を取得
except KeyError as e:
    print(f"エラー: {e}")
エラー: '3'

スライスの範囲外アクセス

loc[]でスライスを使用する際、範囲外のインデックスを指定すると、KeyErrorが発生します。

以下のサンプルコードでは、範囲外のスライスを指定した場合のエラーを示します。

# スライスの範囲外アクセス
try:
    rows = df.loc[0:5]  # 範囲外のスライスを取得
except KeyError as e:
    print(f"エラー: {e}")
エラー: '5'

ラベルが重複している場合の挙動

データフレームのインデックスや列名が重複している場合、loc[]は最初に一致したラベルのデータを返します。

以下のサンプルコードでは、重複したインデックスを持つデータフレームを示します。

# 重複したインデックスを持つデータフレーム
data = {
    '名前': ['田中', '鈴木', '田中'],
    '年齢': [28, 34, 22]
}
df = pd.DataFrame(data, index=[0, 1, 0])  # インデックスが重複
# 重複したインデックスを指定
duplicate_row = df.loc[0]  # 最初の行を取得
print(duplicate_row)
名前  年齢
0  田中  28
0  田中  22

loc()とiloc()の混同に注意

loc[]iloc[]は似ていますが、異なる目的で使用されます。

loc[]はラベルベースで行や列を取得するのに対し、iloc[]は整数ベースで行や列を取得します。

以下のサンプルコードでは、loc[]iloc[]の違いを示します。

# loc()とiloc()の混同に注意
row_loc = df.loc[0]  # ラベルを使って行を取得
row_iloc = df.iloc[0]  # 整数インデックスを使って行を取得
print("locで取得した行:")
print(row_loc)
print("\nilocで取得した行:")
print(row_iloc)
locで取得した行:
   名前  年齢
0  田中  28
ilocで取得した行:
名前    田中
年齢     28
Name: 0, dtype: object

これらの注意点を理解することで、loc()をより安全に効果的に使用できるようになります。

まとめ

この記事では、Pandasのloc()メソッドを使ったデータの取得や操作方法について詳しく解説しました。

loc()を利用することで、行や列をラベルベースで柔軟に操作できるため、データフレームの管理がより効率的になります。

特に、データの更新や新しい列の追加、条件に基づくフィルタリングなど、さまざまな応用が可能です。

これらの知識を活用して、実際のデータ分析や処理に役立ててみてください。

関連記事

Back to top button