Pandas DataFrame入門:構造・作り方・使い方・Seriesとの違いを初心者向けにわかりやすく解説【第3回】

Pandas DataFrame入門:構造・作り方・使い方・Seriesとの違いを初心者向けにわかりやすく解説【第3回】

データ分析を始める上で、Pandas DataFrameは避けて通れないほど重要なツールです。 表形式データを効率的に扱うための、データ分析の基盤 と言えます。Excelやデータベースのテーブルのように、データを整理し、様々な操作を驚くほど効率的に 行えます。Pandas DataFrame を使いこなせるかどうかで、その後のデータ分析のスピードと質が大きく変わってきます。だからこそ、基本的な構造や「作り方(生成方法)」の理解が不可欠です。

また、Pandas DataFrame と密接に関連している Pandas Series も理解しておきましょう。Seriesは DataFrame の一つの「列」とも言えるデータ構造です。Seriesを理解することで、DataFrameの仕組みがより深く把握できます。

この記事では、初心者向けに Pandas DataFrame の基本的な構造と「作り方(生成方法)」に焦点を当てて徹底解説します。さらに、Pandas Series との「違い」を明確にすることで、DataFrameへの理解を深めていきましょう。pd.DataFrame メソッドを使った基本的な作成方法も、コード例と共に丁寧にご紹介します。

▶️ DataFrame, Series の公式ドキュメントも参考にしてください:

【この記事で学べること】

  • Pandas DataFrame の基本的な構造と役割
  • 様々なデータ形式から DataFrame を「作成する」方法(pd.DataFrame の使い方)
  • Pandas SeriesDataFrame の根本的な「違い」

【体験談】私自身、最初にSeriesとDataFrameの違いが分からず、2次元リストをSeriesに渡してエラーになったことがあります。Seriesは1次元、DataFrameは2次元という違いを意識することが最初のつまずきを防ぐカギだと痛感しました。

Pandasのインストール

Pandasがインストールされていない場合は、以下のコマンドを使ってインストールします。


pip install pandas

Pandasのインポート

PandasをPythonコード内で使うために、まずインポートします。一般的に、pdという別名でインポートします。


import pandas as pd

Pandas DataFrame の基本:構造と作り方

Pandas DataFrameとは?:データ分析の強力な味方

Pandas DataFrame は、Pythonで表形式のデータを扱うための最も基本的なデータ構造です。データ分析における中心的な存在 と言えます。スプレッドシートやデータベースのテーブルのような形でデータを整理し、様々な操作を効率的に行えます。

といった、データ分析のあらゆるステップで DataFrame は活躍します。DataFrame を使いこなすことで、手作業では時間のかかるデータ処理を自動化し、より高度な分析に進むことができるようになります。データ分析プロジェクトのほとんどの場面で DataFrame が中心的な役割を果たします。


【他の記事へのご案内】 Pandas DataFrame を作成した後のデータの確認方法や、特定のデータを取り出す「抽出・選択」の方法については、別途詳細な記事をご用意しています。この記事で DataFrame の基本を理解したら、ぜひ別の記事で実践的な操作方法を学んでみてください。

Pandas DataFrame の基本的な構造

DataFrame は、以下の要素から構成されます。

  • データ: 表の中身の値。様々なデータ型(数値、文字列など)を持つことができます。
  • 列名 (Columns): 各列のラベル。各列は「Series」という1次元のデータ構造と考えることもできます。
  • インデックス (Index): 各行のラベル。デフォルトでは0から始まる連番ですが、自由な値を設定できます。

以下の図は、Pandas DataFrame の構造をイメージしたものです。

PandasのDataFrame構造を示した図。左にIndex、上部に列名(Columns)があり、中央にデータが配置されている。
図:PandasのDataFrameの構造。Index(インデックス)・列名(Columns)・データの関係を示している。

Pandas DataFrame の作り方(生成方法)

Pandas DataFrame は、pd.DataFrame() というメソッドを使って様々なデータ形式から作成(生成)できます。データ分析でよく使われる主な作成方法をここでは紹介します。

リストのリストから作成

Pythonの「リストのリスト」(リストの中にさらにリストが入っている構造)を使うことがよくあります。この場合、外側のリストの各要素が「行」に、内側のリストの要素が各「列」の値になります。columns 引数で列名を指定するのが一般的です。


data_list_of_list = [[1, 'Alice', 24],
                     [2, 'Bob', 27],
                     [3, 'Charlie', 22],
                     [4, 'David', 32],
                     [5, 'Eve', 29]]

# columns引数で列名を指定してDataFrameを作成
df_from_list_of_list = pd.DataFrame(data_list_of_list, columns=['ID', 'Name', 'Age'])

print("リストのリストから作成したDataFrame:\n", df_from_list_of_list)

リストのリストから作成したDataFrame:
    ID     Name  Age
0   1    Alice   24
1   2      Bob   27
2   3  Charlie   22
3   4    David   32
4   5      Eve   29

辞書から作成

Pythonの辞書も pd.DataFrame() に渡すことができます。この場合、辞書のキーがDataFrameの「列名」に、値(リストやNumPy配列など)がその「列のデータ」になります。この方法が、直感的に DataFrame を作成しやすい場合が多いです。


data_dict = {'ID': [1, 2, 3, 4, 5],
             'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
             'Age': [24, 27, 22, 32, 29]}

# 辞書からDataFrameを作成
df = pd.DataFrame(data_dict)

print("\n辞書から作成したDataFrame:\n", df)
# 以降の例で使用するため、変数dfに代入 (必要であれば既存のコードを調整)

辞書から作成したDataFrame:
    ID     Name  Age
0   1    Alice   24
1   2      Bob   27
2   3  Charlie   22
3   4    David   32
4   5      Eve   29

NumPy配列から作成

データがNumPy配列として存在する場合、直接 pd.DataFrame() に渡して DataFrame を生成 することもできます。リストのリストからの作成と同様に、columnsindex 引数を指定できます。


# Numpyのインポート
# NumpyをPythonコード内で使うために、まずインポートします。一般的に、npという別名でインポートします。
import numpy as np

# NumPyは高速な数値計算を行うためのライブラリですが、
# 初心者の方は現時点でその詳細な使い方を深く気にする必要はありません。
# Pandas DataFrameを作成する際などに利用されることがある、という認識でまずは十分です。
# 同じ型の要素を持つ多次元配列を効率的に扱うのに役立ちます。

data_np = np.array([[1, 'Alice', 24],
                    [2, 'Bob', 27],
                    [3, 'Charlie', 22]])
df_from_np = pd.DataFrame(data_np, columns=['ID', 'Name', 'Age'])
print("\nNumPy配列から作成したDataFrame:\n", df_from_np)

NumPy配列から作成したDataFrame:
   ID     Name Age
0  1    Alice  24
1  2      Bob  27
2  3  Charlie  22

インデックスを指定して作成・変更

Pandas DataFrame では、行ラベルであるインデックスを自由に設定したり変更したりできます。

インデックス (Index) は、DataFrame の各行を一意に識別するためのラベルです。デフォルトでは 0 から始まる連番が自動的に振られますが、データの特性に合わせて日付や ID などの意味のある値をインデックスとして設定することも可能です。インデックスは、特定の行を効率的に選択したり、複数の DataFrame を結合したりする際に重要な役割を果たします。

set_index() メソッドを使うと、特定の列をインデックスに設定できます。


# 前の例で作成したdfを使用 (必要であればここでdfを再定義または確認)
# 例えば、data_dictから作成したdfを使用する場合:
data_dict_for_index = {'ID': [1, 2, 3, 4, 5],
                       'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
                       'Age': [24, 27, 22, 32, 29]}
df_index_example = pd.DataFrame(data_dict_for_index) # 元のdfを上書きしないように変数名を変更

print("インデックス設定前のDataFrame:\n", df_index_example)

# 'ID'列をインデックスに設定
df_with_index = df_index_example.set_index('ID')
print("\n'ID'列をインデックスに設定したDataFrame:\n", df_with_index)

# 以降の例で使用するため、必要に応じて変数dfを更新
# df = df_with_index # 後続でこのdfを使用する場合は設定

インデックス設定前のDataFrame:
    ID     Name  Age
0   1    Alice   24
1   2      Bob   27
2   3  Charlie   22
3   4    David   32
4   5      Eve   29

'ID'列をインデックスに設定したDataFrame:
        Name  Age
ID              
1     Alice   24
2       Bob   27
3   Charlie   22
4     David   32
5       Eve   29

5. その他の作り方(ファイル読み込みなど)

上記以外にも、以下のような方法で Pandas DataFrame を作成できます。

  • CSVファイルやExcelファイルなどの外部ファイルを読み込む(pd.read_csv(), pd.read_excel() など)
  • Pandas Series の辞書から作成する

CSVファイルを読み込む方法については、【第2回】Google ColabとDriveで簡単CSV読み込み・保存|初心者向けDrive連携ガイド の記事で解説していますので、興味があればご覧ください。

【DataFrame作成時の注意点】

特にリストのリストから作成する場合、内側のリストの要素数が揃っていないとエラーになるなど、データの構造に注意が必要です。

Pandas Series と DataFrame の違いを徹底理解

Pandas Seriesとは?:その役割とDataFrameとの関係

Pandas Series は、1次元のラベル付きデータ構造です。リストやNumPy配列に似ていますが、インデックスを持つ点で異なります。

Pandas Series は、Pandas DataFrame を構成する「一つの列」として理解すると、その役割が分かりやすくなります。

【どんな時にSeriesを使う?】 Series は、例えば DataFrame から特定の列だけを取り出して分析したい場合などに便利です。もちろん、単独で1次元データを扱いたい場合にも使用します。

DataFrameからSeriesを取り出す

前のセクションで作成した DataFrame から特定の列を選択すると、それは Pandas Series になります。この関係性をコードで確認してみましょう。


# 前のセクションで作成したdfを使用 (例えば、辞書から作成したdf)
# df = pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'], 'Age': [24, 27, 22, 32, 29]}) # 必要であればここでdfを再定義

print("元のDataFrame:\n", df)

# 'Name'列を取り出す
names_series = df['Name']
print("\n'Name'列(Seriesとして取得):\n", names_series)
print("取得したデータの型:", type(names_series))

元のDataFrame:
    ID     Name  Age
0   1    Alice   24
1   2      Bob   27
2   3  Charlie   22
3   4    David   32
4   5      Eve   29

'Name'列(Seriesとして取得):
 0      Alice
1        Bob
2    Charlie
3      David
4        Eve
Name: Name, dtype: object
取得したデータの型: <class 'pandas.core.series.Series'>

Seriesの基本的な作り方

Pandas Series も、pd.Series() メソッドを使って様々なデータ形式から作成できます。DataFrameの列が Series であることを理解するために、基本的な作成方法を簡単に見てみましょう。詳細な作成方法については、別の機会に詳しく解説します。


# リストから作成する例
data_s_list = [10, 20, 30, 40]
series_from_list = pd.Series(data_s_list)
print("\nリストから作成したSeries:\n", series_from_list)

# 辞書から作成する例(インデックスを指定したい場合に便利)
data_s_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
series_from_dict = pd.Series(data_s_dict)
print("\n辞書から作成したSeries:\n", series_from_dict)

リストから作成したSeries:
0    10
1    20
2    30
3    40
dtype: int64

辞書から作成したSeries:
a    10
b    20
c    30
d    40
dtype: int64

Series と DataFrame の決定的な違い(構造、次元、操作性)

Pandas を学ぶ上で、SeriesDataFrame の「違い」を明確に理解することは非常に重要です。主な違いは以下の点です。

  1. 次元:

    • Series: 1次元のデータ構造
    • DataFrame: 2次元のデータ構造(行と列)
  2. 構造:

    • Series: データが縦一列に並び、それぞれのデータにインデックス(ラベル)が付いています。
    • DataFrame: 行と列を持つテーブル形式で、各列には列名が、各行にはインデックスが付きます。
  3. 以下の図は、この構造の違いを視覚的に示したものです。

    Pandas SeriesとDataFrameの構造の違いを図解

  4. 操作性:

    この違いを理解することで、どのようなデータをSeriesで扱うべきか、 DataFrameで扱うべきかが明確になり、より効率的にコードを書けるようになります。

  5. ✅ まとめ

    この記事では、Pandasデータ分析 の要となる Pandas DataFrame の基本的な構造と、pd.DataFrame() メソッドを使ったリストや辞書からの「基本的な作り方(生成方法)」を徹底解説しました。

    また、DataFrame を構成する要素とも言える Pandas Series の概要や、SeriesDataFrame の根本的な「違い」(次元、構造、操作性)についても理解を深めました。

    これらの Pandas の基礎を固めることで、データ分析の様々なステップに進む準備ができました。

    Pandas DataFrame を使いこなすためには、作成方法だけでなく、その後のデータ操作が非常に重要になります。ぜひ、次回以降の記事も参考に、Pandas DataFrame でのデータ分析スキルをステップアップさせていきましょう。

    Google ColabとDriveで簡単CSV操作|pandasでの読み込み・保存を初心者向けに解説【第2回】
    Google Colab と Google Drive を連携し、CSV を読み込み・保存する手順を画像付きで解説します。

コメント

タイトルとURLをコピーしました