Pandas データ選択

PandasBeginner

はじめに

Pandas データ選択の実験へようこそ!Pandas は Python におけるデータ操作と分析のための強力なライブラリです。データ分析における最も基本的なタスクの 1 つは、データの特定のサブセットを選択することです。単一の列、いくつかの特定の行、またはデータセットの複雑なスライスを調べる必要がある場合でも、Pandas はその作業を完了するためのさまざまな柔軟で効率的な方法を提供します。

この実験では、学生情報のサンプルデータセットを扱います。以下の方法を学びます。

  • ブラケット表記を使用して、単一および複数の列を選択する。
  • .loc アクセサを使用して、ラベルで行を選択する。
  • .iloc アクセサを使用して、整数位置で行を選択する。
  • 行と列の選択を組み合わせて、データの正確なスライスを抽出する。

この実験の終わりまでに、Pandas のコアデータ選択テクニックについて確かな理解を得ることができ、これはあらゆるデータ関連タスクに不可欠です。

ブラケット記法で単一の列を選択する

このステップでは、Pandas DataFrame から単一の列を選択する最も一般的な方法を学びます。これは、Python の辞書の値にアクセスするのと同様に、ブラケット表記 [] を使用して行われます。

まず、students.csv ファイルからデータを DataFrame に読み込む必要があります。次に、ブラケット内に列名を文字列として渡すことで列を選択できます。

左側のファイルエクスプローラーから main.py ファイルを開き、以下のコードを追加してください。

import pandas as pd

## CSV ファイルを DataFrame に読み込む
df = pd.read_csv('students.csv')

## 'name'列を選択する
name_column = df['name']

## 選択した列を出力する
print(name_column)

それでは、スクリプトを実行しましょう。WebIDE でターミナルを開き、次のコマンドを実行してください。

python3 main.py

出力が表示されます。これは、'name' 列のすべての名前を含む Pandas Series オブジェクトです。

0      Alice
1        Bob
2    Charlie
3      David
4        Eve
Name: name, dtype: object

ご覧のとおり、単一の列を選択すると Series が返されます。これは基本的に 1 次元のラベル付き配列です。

リストで複数の列を選択する

このステップでは、前のテクニックを拡張して、一度に複数の列を選択する方法を学びます。これを行うには、単一の文字列を渡す代わりに、選択ブラケット内に列名のリストを渡します。二重ブラケット [[]] の使用に注意してください。外側のブラケットは選択自体用であり、内側のブラケットは列のリストを作成します。

main.py ファイルを修正して、name 列と score 列の両方を選択しましょう。

main.py を以下のコードで更新してください。

import pandas as pd

## CSV ファイルを DataFrame に読み込む
df = pd.read_csv('students.csv')

## 'name'列と'score'列を選択する
subset = df[['name', 'score']]

## 結果のサブセット DataFrame を出力する
print(subset)

次に、ターミナルからスクリプトを再度実行します。

python3 main.py

出力は、指定した列のみを含む新しい DataFrame になります。

      name  score
0    Alice     85
1      Bob     92
2  Charlie     95
3    David     88
4      Eve     90

単一の列を選択すると Series が返されるのとは異なり、複数の列を選択すると新しい DataFrame が返されます。

loc を使用してラベルで行を選択する

このステップでは、.loc アクセサを使用してラベルに基づいてデータを選択する方法を学びます。.loc インデクサーは主にラベルベースであり、選択を行う際にインデックスの 名前 (またはラベル) を使用します。デフォルトでは、インデックス列を指定せずに CSV を読み込むと、Pandas は 0 から始まるデフォルトの整数インデックスを割り当てます。これらの整数は行のラベルとして機能します。

.loc を使用して、インデックスラベルが 2 である DataFrame の 3 行目を選択しましょう。

main.py ファイルを以下のコードで更新してください。

import pandas as pd

## CSV ファイルを DataFrame に読み込む
df = pd.read_csv('students.csv')

## インデックスラベル 2 の行を選択する
charlie_data = df.loc[2]

## 選択した行を出力する
print(charlie_data)

ターミナルからスクリプトを実行します。

python3 main.py

出力は、インデックスラベル 2 を持つ行のすべてのデータを含む Series になります。

name        Charlie
age              21
major     Mathematics
score            95
Name: 2, dtype: object

これは、学生「Charlie」のデータを示しています。ラベルがわかっている場合に .loc を使用して行にアクセスするのは強力な方法です。

iloc を使用して整数位置で行を選択する

このステップでは、別の選択方法である .iloc について説明します。.iloc インデクサーは主に整数位置ベースです。Python のリストスライシングと同様に機能し、整数インデックスを使用して要素にアクセスします。これはラベルを使用する .loc とは異なります。デフォルトのインデックスラベルも整数ですが、非整数ラベルがある場合、この区別は非常に重要になります。

.iloc を使用して、DataFrame の最初の行、つまり整数位置 0 を選択しましょう。

main.py ファイルを以下のコードで更新してください。

import pandas as pd

## CSV ファイルを DataFrame に読み込む
df = pd.read_csv('students.csv')

## 最初の行(整数位置 0)を選択する
first_row = df.iloc[0]

## 選択した行を出力する
print(first_row)

ターミナルからスクリプトを実行します。

python3 main.py

出力は、最初の学生「Alice」のデータを含む Series になります。

name       Alice
age           20
major    Physics
score         85
Name: 0, dtype: object

重要な違いを覚えておいてください。.loc はラベル用、.iloc は整数位置用です。

loc で行と列をスライスする

この最終ステップでは、これまでに学んだことを組み合わせて、より強力な選択を行います。.loc.iloc の両方で、df.loc[row_selector, column_selector] という構文を使用して、行と列を同時に選択できます。

.loc を使用して、行のスライスと列のスライスを選択します。.loc の重要な特徴は、ラベルでスライスする場合(例:1:3)、終了ラベル(3)が 含まれる ことです。

インデックスラベル 1 から 3 までの行と、name から major までの列を選択しましょう。

main.py ファイルを以下のコードで更新してください。

import pandas as pd

## CSV ファイルを DataFrame に読み込む
df = pd.read_csv('students.csv')

## インデックスラベル 1 から 3 まで(両端を含む)の行
## および 'name' から 'major' まで(両端を含む)の列を選択する
data_slice = df.loc[1:3, 'name':'major']

## 結果のスライスを出力する
print(data_slice)

ターミナルからスクリプトを実行します。

python3 main.py

出力は、元のデータの特定の「スライス」である新しい DataFrame です。

      name  age           major
1      Bob   22  Computer Science
2  Charlie   21       Mathematics
3    David   23       Engineering

このテクニックは、分析のためにデータセットの特定の領域を分離するのに非常に役立ちます。

まとめ

実験はこれで完了です!Pandas でデータを選択するための基本的な方法をすべて習得しました。

この実験では、以下のことを練習しました。

  • ブラケット記法 df['column'] を使用して単一の列を選択し、Series を返します。
  • ブラケット記法 df[['col1', 'col2']] でリストを使用して複数の列を選択し、DataFrame を返します。
  • ラベルベースのインデックス作成に強力な .loc を使用して、ラベルで行を選択します。
  • 標準的な Python のスライシング規則に従う .iloc を使用して、整数位置で行を選択します。
  • .loc で行セレクターと列セレクターを組み合わせて、データの特定の 2 次元スライスを抽出します。

これらの選択テクニックを習得することは、データ分析と操作のための Pandas を習熟するための重要な最初のステップです。これで、DataFrame のどの部分にも自信を持ってアクセスし、検査、分析、または変更することができます。