Pandas DataFrame入門:基本構造・作り方・Seriesとの違いを図解で徹底解説【第3回】

この記事では、初心者向けに「pandas DataFrameとは何か」から、その基本構造と作り方(生成方法)を入門的に解説します。さらに、pandas Seriesとの違いも図解で明確にしながら、DataFrameへの理解を一段と深めていきましょう。pd.DataFrame()メソッドを使った基本的な作成方法も、コード例とともに丁寧に紹介します。

pandas DataFrameは、データ分析を行う上で欠かせない“表形式データ”の基盤です。Excelやデータベースのように、行と列で構成されたデータを効率的に整理・操作できます。これを使いこなせるかどうかで、分析スピードと精度が大きく変わります。そのため、DataFrameの基本構造と作り方を正しく理解することが最初のステップです。

また、DataFrameと密接に関連するpandas Seriesも押さえておきましょう。SeriesはDataFrameを構成する“1列分”に相当するデータ構造です。Seriesを理解することで、DataFrameの仕組みと操作性がより深く理解できます。

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

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

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

【体験談】私自身、最初に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で表形式のデータを扱うための最も基本的なデータ構造です。データ分析における中心的な存在 と言えます。スプレッドシートやデータベースのテーブルのような形でデータを整理し、以下の様々な操作を効率的に行えます。

📘 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ファイルを読み込む方法については、 Google Colab CSV 読み込み&保存入門|pandas で read_csv と to_csv を徹底解説【第 2 回】 の記事で解説していますので、興味があればご覧ください。

【DataFrame作成時の注意点】

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

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

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: 行と列を持つテーブル形式で、各列には列名が、各行にはインデックスが付きます。

    以下の図は、この構造の違いを視覚的に示したものです。

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

  3. 操作性:

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

✅ まとめ

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

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

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

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

▲ ページトップへ戻る

Q
Pythonでリストのリストからpandas DataFrameを作る方法は?
A

pd.DataFrame() に2次元リストを渡します。外側が行、内側が列です。

例: df = pd.DataFrame([[1, ‘Alice’], [2, ‘Bob’]], columns=[‘ID’, ‘Name’])

Q
pandasで辞書(dict)からDataFrameを作るには?
A

キーが列名、値が列データ(リスト)になるように辞書を渡します。例: df = pd.DataFrame({‘ID’:[1,2], ‘Name’:[‘Alice’,’Bob’]})

Q
pandas DataFrameでインデックスを設定するには?
A

df.set_index('列名') を使えば、指定した列をインデックスに変更できます。
たとえば:

df.set_index('ID')  

これにより、ID列の値が行ラベル(Index)として使用されます。

Q
pandas Seriesの作り方は?
A

pd.Series() にリストや辞書を渡して作成します。例: pd.Series([10,20,30])、pd.Series({‘a’:10,’b’:20})

Q
pandas SeriesとDataFrameの違いは?
A

Seriesは1次元、DataFrameは2次元のデータ構造です。SeriesはDataFrameの1列に相当します。

Q
pandas DataFrameで df[‘A’] と df[[‘A’]] の違いは?
A

同じように見えるこの2つですが、結果の型と次元が異なります

記述返り値の型次元特徴
df['A']Series1次元1つの列をSeriesとして取得。構造が簡潔。
df[['A']]DataFrame2次元1列でも表(DataFrame)として保持。後処理に便利。

コメント

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