[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()
を利用することで、行や列をラベルベースで柔軟に操作できるため、データフレームの管理がより効率的になります。
特に、データの更新や新しい列の追加、条件に基づくフィルタリングなど、さまざまな応用が可能です。
これらの知識を活用して、実際のデータ分析や処理に役立ててみてください。