フリーキーズ | 独学プログラミング

pandas入門者に贈るデータフレーム操作の基本!初心者が知っておくべき使い方

リンドくん

リンドくん

たなべ先生、Pythonで「pandas」っていうのをよく聞くんですけど、これって何なんですか?

たなべ

たなべ

pandasはExcelみたいに表形式のデータを扱えるライブラリなんだ。
データ分析には欠かせないツールで、使いこなせるとめちゃくちゃ便利なんだよ。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

pandasとは?データ分析の必須ツール

プログラミングを学んでいくと、「データ分析」という言葉をよく耳にするようになります。
そして、Pythonでデータ分析を行う際に絶対に避けて通れないのがpandasです。

pandasは、Pythonでデータを効率的に扱うための強力なライブラリです。
特に表形式のデータ(テーブルデータ)を操作するのに特化しており、ExcelやCSVファイルのようなデータを簡単に読み込んだり、加工したり、分析したりすることができます。

リンドくん

リンドくん

表形式のデータって、具体的にはどんなものですか?

たなべ

たなべ

例えば、こんな感じのデータだよ。

名前年齢職業
田中25エンジニア
佐藤30デザイナー
鈴木28データサイエンティスト

こういった行と列で構成されたデータを扱うのが得意なんだ。

pandasが使われる場面

pandasは以下のような場面で活躍します。

  • CSVやExcelファイルの読み込み・加工 - ファイルからデータを簡単に取り込める
  • データのクリーニング - 欠損値の処理や重複データの削除など
  • データの集計・統計処理 - 平均値や合計値の計算
  • データの可視化の準備 - グラフ作成のためのデータ整形
  • 機械学習の前処理 - AIモデルに入力するデータの準備

このように、データを扱う作業のほぼすべての工程でpandasが使われています。
データサイエンスやAI開発を目指す方にとって、pandasは必須スキルと言えるでしょう。

pandasの基本 - DataFrameとは

リンドくん

リンドくん

pandasで一番大事な概念って何ですか?

たなべ

たなべ

それは間違いなくDataFrame(データフレーム)だね。
これがpandasの心臓部と言っても過言じゃないんだ。

DataFrameの基本概念

DataFrameは、pandasにおける最も重要なデータ構造です。簡単に言えば、Excelのシートのような表形式のデータを扱うためのものです。

DataFrameには以下のような特徴があります。

  • 行と列で構成される2次元のデータ - 縦横にデータが並んでいる
  • 各列に名前(カラム名)がある - データの種類がわかりやすい
  • 各行にインデックス(番号)がある - データを特定しやすい
  • 異なるデータ型を混在できる - 数値、文字列、日付などを一緒に扱える

実際のDataFrameのイメージは以下のようなものです。

名前  年齢     職業
0    田中  25  エンジニア
1    佐藤  30  デザイナー
2    鈴木  28  データサイエンティスト

左端の「0, 1, 2」がインデックス、上部の「名前、年齢、職業」がカラム名、そしてその下にある実際のデータがです。

pandasのインストール

pandasを使用するには、まずインストールが必要です。

pip install pandas

インストール後は、Pythonスクリプトの冒頭で以下のようにインポートします。

import pandas as pd

慣例としてpdという短い名前でインポートするのが一般的です。

DataFrameの作成方法

リンドくん

リンドくん

実際にDataFrameを作るにはどうすればいいんですか?

たなべ

たなべ

いくつか方法があるけど、まずは辞書から作る方法が理解しやすいよ。順番に見ていこう。

辞書からDataFrameを作成

最もシンプルな方法は、Pythonの辞書型データからDataFrameを作成する方法です。

import pandas as pd

# 辞書でデータを定義
data = {
    '名前': ['田中', '佐藤', '鈴木'],
    '年齢': [25, 30, 28],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト']
}

# DataFrameを作成
df = pd.DataFrame(data)

# 表示
print(df)

実行結果は以下のようになります。

名前  年齢              職業
0  田中  25         エンジニア
1  佐藤  30        デザイナー
2  鈴木  28  データサイエンティスト

この方法では、辞書のキーがカラム名辞書の値(リスト)が各列のデータになります。

リストのリストからDataFrameを作成

行ごとのデータをリストで表現する方法もあります。

import pandas as pd

# リストのリストでデータを定義
data = [
    ['田中', 25, 'エンジニア'],
    ['佐藤', 30, 'デザイナー'],
    ['鈴木', 28, 'データサイエンティスト']
]

# カラム名を指定してDataFrameを作成
df = pd.DataFrame(data, columns=['名前', '年齢', '職業'])

print(df)

こちらの方法では、各リストが1行分のデータになります。

CSVファイルから読み込む

実務では、既存のCSVファイルからDataFrameを作成することが多いです。

import pandas as pd

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

print(df)

read_csv()関数を使えば、CSVファイルを一瞬でDataFrameに変換できます。
これがpandasの最も強力な機能の一つです。

DataFrameの基本操作

リンドくん

リンドくん

DataFrameを作ったあとは、どんな操作ができるんですか?

たなべ

たなべ

たくさんあるけど、まずはデータを見る・選ぶ・集計するという基本操作から学んでいこう。

データの確認

まずは作成したDataFrameの中身を確認する方法です。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤'],
    '年齢': [25, 30, 28, 35, 22],
    '職業': ['エンジニア', 'デザイナー', 'データサイエンティスト', 'マネージャー', 'エンジニア'],
    '年収': [500, 450, 600, 700, 400]
}

df = pd.DataFrame(data)

# 最初の3行を表示
print(df.head(3))

# 最後の2行を表示
print(df.tail(2))

# データの概要を表示
print(df.info())

# 統計量を表示
print(df.describe())

これらのメソッドを使えば、データの全体像を素早く把握できます。特に大きなデータセットを扱う際には、head()tail()で一部だけを確認するのが効率的です。

特定の列を取得

DataFrameから特定の列だけを取り出すことができます。

# 1つの列を取得(Seriesとして取得される)
ages = df['年齢']
print(ages)

# 複数の列を取得(DataFrameとして取得される)
subset = df[['名前', '年収']]
print(subset)

列を1つだけ取得するとSeries(シリーズ)という1次元のデータ構造になり、複数列を取得するとDataFrameのままです。

条件に基づくデータの抽出

特定の条件を満たす行だけを取り出すこともできます。

# 年齢が30歳以上の人だけを抽出
older_than_30 = df[df['年齢'] >= 30]
print(older_than_30)

# 職業がエンジニアの人だけを抽出
engineers = df[df['職業'] == 'エンジニア']
print(engineers)

# 複数条件(年齢が25歳以上かつ年収が500万以上)
high_earners = df[(df['年齢'] >= 25) & (df['年収'] >= 500)]
print(high_earners)

このように、条件式を使ってデータをフィルタリングできるのがpandasの便利なところです。
複数の条件を組み合わせる場合は、&(AND)や|(OR)を使います。

新しい列の追加

既存のデータをもとに新しい列を追加することもできます。

# 年収を12で割って月収を計算
df['月収'] = df['年収'] / 12

# 年齢が30歳以上かどうかのフラグ
df['30歳以上'] = df['年齢'] >= 30

print(df)

このように、既存の列を使った計算結果を新しい列として追加できます。

データの集計と統計処理

リンドくん

リンドくん

データの平均とか合計とかも簡単に出せるんですか?

たなべ

たなべ

もちろん!pandasには便利な集計メソッドがたくさん用意されているんだ。

基本的な統計量の計算

DataFrameには、統計計算のための便利なメソッドが多数用意されています。

import pandas as pd

data = {
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤'],
    '年齢': [25, 30, 28, 35, 22],
    '年収': [500, 450, 600, 700, 400]
}

df = pd.DataFrame(data)

# 平均値
print("年齢の平均:", df['年齢'].mean())
print("年収の平均:", df['年収'].mean())

# 合計
print("年収の合計:", df['年収'].sum())

# 最大値・最小値
print("最高年齢:", df['年齢'].max())
print("最低年収:", df['年収'].min())

# 中央値
print("年齢の中央値:", df['年齢'].median())

# 標準偏差
print("年収の標準偏差:", df['年収'].std())

これらのメソッドを使えば、複雑な統計計算も一行で実行できます。

グループごとの集計

groupby()メソッドを使うと、カテゴリごとにデータを集計できます。

data = {
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤', '中村'],
    '職業': ['エンジニア', 'デザイナー', 'エンジニア', 'マネージャー', 'エンジニア', 'デザイナー'],
    '年収': [500, 450, 600, 700, 400, 480]
}

df = pd.DataFrame(data)

# 職業ごとの平均年収を計算
average_by_job = df.groupby('職業')['年収'].mean()
print(average_by_job)

# 職業ごとの人数をカウント
count_by_job = df.groupby('職業').size()
print(count_by_job)

groupby()Excelのピボットテーブルのような機能を提供し、データを様々な角度から分析できます。

データの並び替えとソート

データを特定の列で並び替えることもよく行われる操作です。

# 年齢で昇順にソート
df_sorted_asc = df.sort_values('年齢')
print(df_sorted_asc)

# 年収で降順にソート
df_sorted_desc = df.sort_values('年収', ascending=False)
print(df_sorted_desc)

# 複数列でソート(職業で昇順、その中で年収で降順)
df_multi_sorted = df.sort_values(['職業', '年収'], ascending=[True, False])
print(df_multi_sorted)

sort_values()メソッドを使えば、データを好きな順番に並び替えられます。

例)売上データの分析

リンドくん

リンドくん

実際にどんな風に使われるか、もっと実践的な例が見たいです!

たなべ

たなべ

じゃあ、売上データを分析するシナリオで見てみようか。実務に近い形で理解できると思うよ。

売上データの準備と分析

実際のビジネスシーンを想定した例を見てみましょう。

import pandas as pd

# 売上データの作成
sales_data = {
    '日付': ['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-01', '2025-01-02', '2025-01-03'],
    '商品': ['ノートPC', 'ノートPC', 'ノートPC', 'マウス', 'マウス', 'マウス'],
    '売上数': [5, 3, 7, 20, 15, 25],
    '単価': [100000, 100000, 100000, 3000, 3000, 3000]
}

df_sales = pd.DataFrame(sales_data)

# 売上金額を計算
df_sales['売上金額'] = df_sales['売上数'] * df_sales['単価']

print("売上データ:")
print(df_sales)

# 商品ごとの合計売上を計算
product_sales = df_sales.groupby('商品')['売上金額'].sum()
print("\n商品ごとの合計売上:")
print(product_sales)

# 日付ごとの合計売上を計算
daily_sales = df_sales.groupby('日付')['売上金額'].sum()
print("\n日付ごとの合計売上:")
print(daily_sales)

# 最も売れた商品を特定
best_product = product_sales.idxmax()
best_sales = product_sales.max()
print(f"\n最も売れた商品: {best_product}({best_sales:,}円)")

このように、pandasを使えば実務レベルのデータ分析も短いコードで実現できます。

pandasを学ぶ際のポイント

最初は基本操作に集中する

pandasには膨大な機能がありますが、最初から全てを覚える必要はありません。以下の基本操作をマスターすれば、多くの分析作業をこなせます。

  • DataFrameの作成
  • データの確認(head(), info(), describe()
  • 列の選択
  • 条件に基づく抽出
  • 基本的な統計量の計算
  • groupby()による集計

エラーメッセージを恐れない

プログラミング学習で最も重要なのは、エラーメッセージを読むことです。
pandasのエラーメッセージは比較的わかりやすく、問題の原因を教えてくれます。エラーが出たら、メッセージをしっかり読んで、何が問題なのかを理解する習慣をつけましょう。

公式ドキュメントを活用する

pandasの公式ドキュメントは非常に充実しています。
わからない操作があったら、まず公式ドキュメントを確認する癖をつけると良いでしょう。

実際のデータで練習する

教材のサンプルデータだけでなく、自分の興味のあるデータで練習することをお勧めします。
例えば、公開されている統計データや、自分で作成したExcelファイルなどを使ってみると、学習がより実践的になります。

まとめ

リンドくん

リンドくん

pandasって思ったより使いやすそうですね!早速試してみたいです。

たなべ

たなべ

その意気だね!
最初は小さなデータで練習して、徐々に複雑な操作に挑戦していくといいよ。データ分析のスキルは、AIエンジニアにとって必須だからね。

この記事では、pandasの基本的な使い方について解説してきました。

重要なポイントのおさらい

  • pandasは表形式データを扱うための強力なライブラリ
  • DataFrameがpandasの中心的なデータ構造
  • データの読み込み、加工、集計が短いコードで実現できる
  • groupby()や条件抽出など、実務で役立つ機能が豊富
  • 基本操作をマスターすれば、多くのデータ分析タスクに対応可能

pandasは、データサイエンスやAI開発において避けて通れない重要なツールです。
最初は難しく感じるかもしれませんが、基本操作を繰り返し練習することで、必ず使いこなせるようになります。

データ分析のスキルは、これからのエンジニアにとってますます重要になっていきます。
pandasをマスターして、データを自在に扱えるエンジニアを目指しましょう!

この記事をシェア

関連するコンテンツ