Pandas

[Python] Pandas – DataFrameで特定の行・列から値を抽出する方法

PandasのDataFrameから特定の行・列の値を抽出するには、主に以下の方法があります。

  1. ラベル指定: .loc[]を使用して、行と列のラベルで指定します。

例えば、df.loc[行ラベル, 列ラベル]

  1. インデックス指定: .iloc[]を使用して、行と列のインデックス番号で指定します。

例えば、df.iloc[行番号, 列番号]

  1. 列名指定: 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  デザイナー

複数の行・列を同時に抽出する方法

複数の行や列を同時に指定してデータを抽出する方法です。

以下のサンプルコードでは、行ラベル02、列ラベル名前職業を抽出しています。

# 複数の行・列を同時に抽出
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  デザイナー

複数の行・列を同時に抽出する方法

複数の行や列を同時に指定してデータを抽出する方法です。

以下のサンプルコードでは、行番号02、列番号02を抽出しています。

# 複数の行・列を同時に抽出
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として作成する方法まで、幅広く取り上げました。

これらのテクニックを活用することで、データ分析やデータ処理の効率を高めることができるでしょう。

ぜひ、実際のデータセットを使ってこれらの方法を試してみて、データ操作のスキルを向上させてください。

関連記事

Back to top button
目次へ