[Python] Pandas – DataFrameで特定の行・列から値を抽出する方法
PandasのDataFrameから特定の行・列の値を抽出するには、主に以下の方法があります。
- ラベル指定:
.loc[]
を使用して、行と列のラベルで指定します。
例えば、df.loc[行ラベル, 列ラベル]
。
- インデックス指定:
.iloc[]
を使用して、行と列のインデックス番号で指定します。
例えば、df.iloc[行番号, 列番号]
。
- 列名指定:
df['列名']
で特定の列を抽出し、さらに行を指定する場合はdf['列名'][行番号]
。
これらを使うことで、柔軟にDataFrameから値を抽出できます。
loc[]を使った行・列の抽出
Pandasのloc[]メソッド
は、行ラベルや列ラベルを使ってDataFrameから特定のデータを抽出するための非常に便利な機能です。
以下では、loc[]
を使ったさまざまな抽出方法について解説します。
行ラベルでの抽出
行ラベルを指定して特定の行を抽出する方法です。
以下のサンプルコードでは、行ラベルが1
の行を抽出しています。
import pandas as pd
# サンプルデータの作成
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [25, 30, 22],
'職業': ['エンジニア', 'デザイナー', '学生']
}
df = pd.DataFrame(data)
# 行ラベルでの抽出
result = df.loc[1]
print(result)
名前 鈴木
年齢 30
職業 デザイナー
Name: 1, dtype: object
列ラベルでの抽出
列ラベルを指定して特定の列を抽出する方法です。
以下のサンプルコードでは、年齢
列を抽出しています。
# 列ラベルでの抽出
result = df.loc[:, '年齢']
print(result)
0 25
1 30
2 22
Name: 年齢, dtype: int64
行・列の同時指定
行と列を同時に指定してデータを抽出する方法です。
以下のサンプルコードでは、行ラベル1
の年齢
列を抽出しています。
# 行・列の同時指定
result = df.loc[1, '年齢']
print(result)
30
スライスを使った範囲指定
行ラベルや列ラベルのスライスを使って、範囲を指定してデータを抽出する方法です。
以下のサンプルコードでは、行ラベル0
から1
までの行を抽出しています。
# スライスを使った範囲指定
result = df.loc[0:1]
print(result)
名前 年齢 職業
0 田中 25 エンジニア
1 鈴木 30 デザイナー
複数の行・列を同時に抽出する方法
複数の行や列を同時に指定してデータを抽出する方法です。
以下のサンプルコードでは、行ラベル0
と2
、列ラベル名前
と職業
を抽出しています。
# 複数の行・列を同時に抽出
result = df.loc[[0, 2], ['名前', '職業']]
print(result)
名前 職業
0 田中 エンジニア
2 佐藤 学生
このように、loc[]メソッド
を使うことで、行ラベルや列ラベルを指定して簡単にデータを抽出することができます。
iloc[]を使った行・列の抽出
Pandasのiloc[]メソッド
は、行番号や列番号を使ってDataFrameから特定のデータを抽出するための機能です。
loc[]
がラベルベースであるのに対し、iloc[]
は位置ベースでデータを扱います。
以下では、iloc[]
を使ったさまざまな抽出方法について解説します。
行番号での抽出
行番号を指定して特定の行を抽出する方法です。
以下のサンプルコードでは、行番号が1
の行を抽出しています。
import pandas as pd
# サンプルデータの作成
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [25, 30, 22],
'職業': ['エンジニア', 'デザイナー', '学生']
}
df = pd.DataFrame(data)
# 行番号での抽出
result = df.iloc[1]
print(result)
名前 鈴木
年齢 30
職業 デザイナー
Name: 1, dtype: object
列番号での抽出
列番号を指定して特定の列を抽出する方法です。
以下のサンプルコードでは、年齢
列(列番号1
)を抽出しています。
# 列番号での抽出
result = df.iloc[:, 1]
print(result)
0 25
1 30
2 22
Name: 年齢, dtype: int64
行・列の同時指定
行と列を同時に指定してデータを抽出する方法です。
以下のサンプルコードでは、行番号1
の年齢
列を抽出しています。
# 行・列の同時指定
result = df.iloc[1, 1]
print(result)
30
スライスを使った範囲指定
行番号や列番号のスライスを使って、範囲を指定してデータを抽出する方法です。
以下のサンプルコードでは、行番号0
から1
までの行を抽出しています。
# スライスを使った範囲指定
result = df.iloc[0:2]
print(result)
名前 年齢 職業
0 田中 25 エンジニア
1 鈴木 30 デザイナー
複数の行・列を同時に抽出する方法
複数の行や列を同時に指定してデータを抽出する方法です。
以下のサンプルコードでは、行番号0
と2
、列番号0
と2
を抽出しています。
# 複数の行・列を同時に抽出
result = df.iloc[[0, 2], [0, 2]]
print(result)
名前 職業
0 田中 エンジニア
2 佐藤 学生
このように、iloc[]メソッド
を使うことで、行番号や列番号を指定して簡単にデータを抽出することができます。
loc[]
と同様に、データの操作が非常に柔軟に行えるため、データ分析において非常に役立ちます。
条件に基づく抽出方法
Pandasでは、条件に基づいてDataFrameから特定のデータを抽出することができます。
これにより、データ分析やデータクリーニングが効率的に行えます。
以下では、条件に基づくデータ抽出のさまざまな方法について解説します。
ブールインデックスの基本
ブールインデックスは、条件を満たす行を抽出するための基本的な方法です。
条件を指定すると、その条件に合致する行がTrue
、それ以外がFalse
となるブール型のSeriesが生成されます。
以下のサンプルコードでは、年齢
が25
以上の行を抽出しています。
import pandas as pd
# サンプルデータの作成
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [25, 30, 22],
'職業': ['エンジニア', 'デザイナー', '学生']
}
df = pd.DataFrame(data)
# ブールインデックスを使った抽出
condition = df['年齢'] >= 25
result = df[condition]
print(result)
名前 年齢 職業
0 田中 25 エンジニア
1 鈴木 30 デザイナー
特定の条件に合致する行の抽出
特定の条件に合致する行を直接抽出する方法です。
以下のサンプルコードでは、職業
がエンジニア
の行を抽出しています。
# 特定の条件に合致する行の抽出
result = df[df['職業'] == 'エンジニア']
print(result)
名前 年齢 職業
0 田中 25 エンジニア
複数条件を使った抽出(AND/OR)
複数の条件を組み合わせてデータを抽出することも可能です。
&
(AND)や|
(OR)を使って条件を結合します。
以下のサンプルコードでは、年齢
が25
以上かつ職業
がエンジニア
の行を抽出しています。
# 複数条件を使った抽出(AND)
result = df[(df['年齢'] >= 25) & (df['職業'] == 'エンジニア')]
print(result)
名前 年齢 職業
0 田中 25 エンジニア
また、年齢
が25
未満または職業
がデザイナー
の行を抽出する場合は、以下のようにします。
# 複数条件を使った抽出(OR)
result = df[(df['年齢'] < 25) | (df['職業'] == 'デザイナー')]
print(result)
名前 年齢 職業
2 佐藤 22 学生
1 鈴木 30 デザイナー
特定の列に基づく条件抽出
特定の列に基づいて条件を設定し、行を抽出する方法です。
以下のサンプルコードでは、年齢
が30
の行を抽出しています。
# 特定の列に基づく条件抽出
result = df[df['年齢'] == 30]
print(result)
名前 年齢 職業
1 鈴木 30 デザイナー
query()メソッドを使った抽出
query()メソッド
を使うと、より直感的に条件を指定してデータを抽出できます。
以下のサンプルコードでは、年齢
が25
以上の行を抽出しています。
# query()メソッドを使った抽出
result = df.query('年齢 >= 25')
print(result)
名前 年齢 職業
0 田中 25 エンジニア
1 鈴木 30 デザイナー
このように、Pandasを使うことで条件に基づいたデータの抽出が簡単に行えます。
これにより、データ分析やデータ処理がより効率的に進められます。
応用例:DataFrameの部分抽出
Pandasを使用すると、DataFrameから特定の部分を抽出して新しいDataFrameを作成することができます。
これにより、必要なデータだけを効率的に扱うことが可能です。
以下では、さまざまな応用例を紹介します。
特定の列だけを抽出して新しいDataFrameを作成
特定の列を抽出して新しいDataFrameを作成する方法です。
以下のサンプルコードでは、名前
と職業
の列だけを抽出しています。
import pandas as pd
# サンプルデータの作成
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [25, 30, 22],
'職業': ['エンジニア', 'デザイナー', '学生']
}
df = pd.DataFrame(data)
# 特定の列だけを抽出して新しいDataFrameを作成
new_df = df[['名前', '職業']]
print(new_df)
名前 職業
0 田中 エンジニア
1 鈴木 デザイナー
2 佐藤 学生
特定の行だけを抽出して新しいDataFrameを作成
特定の行を抽出して新しいDataFrameを作成する方法です。
以下のサンプルコードでは、行番号1
の行だけを抽出しています。
# 特定の行だけを抽出して新しいDataFrameを作成
new_df = df.iloc[[1]]
print(new_df)
名前 年齢 職業
1 鈴木 30 デザイナー
複数条件を組み合わせた抽出
複数の条件を組み合わせてデータを抽出し、新しいDataFrameを作成する方法です。
以下のサンプルコードでは、年齢
が25
以上かつ職業
がエンジニア
の行を抽出しています。
# 複数条件を組み合わせた抽出
new_df = df[(df['年齢'] >= 25) & (df['職業'] == 'エンジニア')]
print(new_df)
名前 年齢 職業
0 田中 25 エンジニア
特定の値を持つ行の抽出
特定の値を持つ行を抽出して新しいDataFrameを作成する方法です。
以下のサンプルコードでは、職業
が学生
の行を抽出しています。
# 特定の値を持つ行の抽出
new_df = df[df['職業'] == '学生']
print(new_df)
名前 年齢 職業
2 佐藤 22 学生
欠損値を含む行・列の抽出
欠損値を含む行や列を抽出する方法です。
以下のサンプルコードでは、欠損値を含む行を抽出しています。
まず、サンプルデータに欠損値を追加します。
# サンプルデータの作成(欠損値を含む)
data_with_nan = {
'名前': ['田中', '鈴木', None],
'年齢': [25, None, 22],
'職業': ['エンジニア', 'デザイナー', '学生']
}
df_nan = pd.DataFrame(data_with_nan)
# 欠損値を含む行の抽出
new_df = df_nan[df_nan.isnull().any(axis=1)]
print(new_df)
名前 年齢 職業
1 鈴木 NaN デザイナー
2 None 22.0 学生
このように、Pandasを使うことでDataFrameから特定の部分を抽出し、新しいDataFrameを作成することができます。
これにより、データ分析やデータ処理がより効率的に行えるようになります。
まとめ
この記事では、Pandasを使用してDataFrameから特定の行や列を抽出する方法について詳しく解説しました。
loc[]
やiloc[]
を使った基本的なデータ抽出から、条件に基づく抽出方法、さらには応用例として特定の列や行を新しいDataFrameとして作成する方法まで、幅広く取り上げました。
これらのテクニックを活用することで、データ分析やデータ処理の効率を高めることができるでしょう。
ぜひ、実際のデータセットを使ってこれらの方法を試してみて、データ操作のスキルを向上させてください。