Pandasによるデータフレームの操作 | データフレームの操作 | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
~
ad. 価格範囲を指定して商品を探せます

Pandasによるデータフレームの操作

Pandas(パンダス)は、Pythonでデータ解析や機械学習の前処理を行うための非常に強力な標準ライブラリです。特に、行と列を持つ表形式のデータ構造であるデータフレーム(DataFrame)の操作に優れています。

ExcelやCSVファイルのような表データを、プログラム上で高速に並び替えたり、特定のデータを抽出したり、平均値などを集計したりすることが可能です。この章では、データフレームの基本的な操作方法について体系的に学びます。

データフレームの生成

データフレームは、Pythonの辞書(dict)やリスト(list)、NumPy配列、または外部のCSVファイルなどから簡単に作成することができます。以下は、一般的な2次元の辞書データからデータフレームを生成する例です。

import pandas as pd

# 辞書からデータフレームを生成
data = {
    '名前': ['田中', '佐藤', '鈴木'],
    '年齢': [24, 30, 28],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト']
}

df = pd.DataFrame(data)

# データフレームの表示
print(df)

コードの説明

  1. import pandas as pd:Pandasモジュールをインポートしています。慣用句として pd というエイリアス(別名)が一般的に使われます。
  2. pd.DataFrame(data):列名をキーとし、その列の縦のデータをリストにした辞書構造を、Pandasのデータフレーム型へ変換します。
  3. df:出力される表には、左端に 0, 1, 2 という行番号が自動的に割り当てられます。これをインデックス(行ラベル)と呼びます。

列(Column)の操作

データフレームの「列」に対して、新しいデータの追加、不要な列の削除、見出しとなる列名の変更といった操作が簡単に行えます。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木'],
    '年齢': [24, 30, 28],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト']
}
df = pd.DataFrame(data)

# 1. 列の追加
df['年収'] = [500, 600, 550]

# 2. 列の削除
# axis=1は「列方向」を指定、inplace=False(デフォルト)は元のdfを書き換えず新しいdfを返す
df = df.drop('年収', axis=1)

# 3. 列名の変更(辞書形式で 古い名: 新しい名 を指定)
df = df.rename(columns={'名前': '氏名'})

# データフレームの表示
print(df)

コードの説明

  1. df['年収'] = [...]:既存の辞書のように新しいキーを指定してリストを代入するだけで、右端に新しい列を追加できます。
  2. df.drop('年収', axis=1):列を削除します。axis=1 の指定は「縦の列」を削除するための必須の設定です(axis=0 は横の行を指します)。
  3. df.rename(columns={...}):特定の列名だけをピンポイントで変更します。

行(Row)の操作

データの追加(行の結合)や、不要な行の削除など、縦方向(インデックス単位)の操作を行います。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木'],
    '年齢': [24, 30, 28],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト']
}
df = pd.DataFrame(data)

# 1. 行の追加
new_row = pd.DataFrame({'名前': ['山田'], '年齢': [26], '職業': ['マーケター']})
df = pd.concat([df, new_row], ignore_index=True)

# 2. 行の削除(インデックス番号を指定)
df = df.drop(2)

# データフレームの表示
print(df)

コードの説明

  1. pd.concat([...], ignore_index=True):2つのデータフレームを縦に連結します。ignore_index=True を指定することで、元のインデックス番号(行番号)を破棄し、0, 1, 2... と綺麗に連番を引き直してくれます。
  2. df.drop(2):インデックス番号が 2 である行(この場合は「鈴木」の行)をピンポイントで削除します。

データのフィルタリング(条件抽出)

特定の条件(例:年齢が30歳以上、特定の職業など)に合致する行だけを抽出する操作は、Pandasで最もよく使われる強力な機能の1つです。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木', '山田'],
    '年齢': [24, 30, 28, 26],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト', 'マーケター']
}
df = pd.DataFrame(data)

# 年齢が28以上の行をフィルタリング
filtered_df = df[df['年齢'] >= 28]

# データフレームの表示
print(filtered_df)

コードの説明

  1. df['年齢'] >= 28:この部分単体では、各行が条件を満たしているかどうかの真偽値(True または False)のリストを作っています。
  2. df[...]:その真偽値のリストを df[...] の中に入れ込むことで、True の行だけが綺麗に抽出される「ブーリアンインデックス参照」という仕組みを利用しています。

集計操作

データフレーム内の数値データに対して、平均値、合計値、最大・最小値などを1行のコマンドで即座に算出できます。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木', '山田'],
    '年齢': [24, 30, 28, 26],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト', 'マーケター']
}
df = pd.DataFrame(data)

# 平均年齢を計算
mean_age = df['年齢'].mean()

# 最大年齢を取得
max_age = df['年齢'].max()

# 合計値を計算したい場合は .sum() も使えます
total_age = df['年齢'].sum()

# 結果を表示
print(f'平均年齢: {mean_age}, 最大年齢: {max_age}')

コードの説明

  1. df['年齢'].mean():特定の列(年齢)を指定し、.mean() メソッドを呼び出すことで、その列全体の数値の平均値を自動計算します。欠損値(空欄)があっても自動で除外して計算してくれます。
  2. df['年齢'].max():指定した列の中の最も大きな値を返します。

まとめ

Pandasを用いたデータフレームの基本的な操作における重要ポイントは以下の通りです。

  • データフレームは強力な表構造:行(インデックス)と列(カラム)の2次元で構成され、様々なデータ型を一元管理できます。
  • axis の指定に注意する:列や行を drop() する際など、縦方向(列)の操作には必ず axis=1 を指定するルールを意識しましょう。
  • 直感的な条件抽出と集計:df[条件式] による一発のフィルタリングや、mean() などの統計用メソッドを組み合わせることで、大量のデータも一瞬で加工・集計することが可能です。

これらの基本操作は、AI・機械学習のデータ前処理、データサイエンス、日々の業務効率化(Excelファイルの自動処理など)のすべての土台となります。実際に手を動かして、データの形状がどう変わるかを確認しながら身につけていきましょう。