データ分析を始める上で、Pandas DataFrameは避けて通れないほど重要なツールです。 表形式データを効率的に扱うための、データ分析の基盤 と言えます。Excelやデータベースのテーブルのように、データを整理し、様々な操作を驚くほど効率的に 行えます。このDataFrame を使いこなせるかどうかで、その後のデータ分析のスピードと質が大きく変わってきます。だからこそ、基本的な構造や「作り方(生成方法)」の理解が不可欠です。
また、Pandas DataFrame と密接に関連している Pandas Series も理解しておきましょう。Seriesは DataFrame の一つの「列」とも言えるデータ構造です。Seriesを理解することで、DataFrameの仕組みがより深く把握できます。
この記事では、初心者向けに Pandas DataFrame の基本的な構造と「作り方(生成方法)」に焦点を当てて徹底解説します。さらに、Pandas Series との「違い」を明確にすることで、DataFrameへの理解を深めていきましょう。pd.DataFrame
メソッドを使った基本的な作成方法も、コード例と共に丁寧にご紹介します。
▶️ DataFrame, Series の公式ドキュメントも参考にしてください:
【この記事で学べること】
- Pandas DataFrame の基本的な構造と役割
- 様々なデータ形式から DataFrame を「作成する」方法(
pd.DataFrame
の使い方) - Pandas Series と DataFrame の根本的な「違い」
【体験談】私自身、最初に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で表形式のデータを扱うための最も基本的なデータ構造です。データ分析における中心的な存在 と言えます。スプレッドシートやデータベースのテーブルのような形でデータを整理し、以下の様々な操作を効率的に行えます。
-
CSVやExcelファイルからデータを読み込んで整形する:
- 【第2回】CSVの読み込み・保存– `read_csv`の基本的な使い方
-
統計量や構造の確認:
- 【第4回】head()で先頭、tail()で末尾を確認 – データの先頭や末尾を確認して全体像を把握
- 【第5回】info()・describe()– データの構造や統計量の概要を確認
- 【第14回】欠損値の確認isnullとヒートマップ – 欠損の場所を可視化して確認
-
グルーピングと集計:
- 【第16回】groupby()・agg()/mean()/sum() – データをカテゴリ別に集計する方法
-
行や列の抽出・ラベル指定など基本操作:
- 【第6回】locによる抽出 – ラベル指定で行や列を選択
- 【第7回】ilocによる抽出– インデックス番号で指定する抽出方法
- 【第8回】locとilocの違い– 両者の違いと使い分けを解説
-
条件による抽出やフィルタリング:
- 【第9回】条件抽出・フィルタリング – 比較演算子や論理演算子による行抽出
- 【第13回】isinによる抽出– 複数条件に一致する行の抽出に便利
-
並び替え・ソート処理:
- 【第10回】sort_index / sort_values – 行や列の並び順を変更する方法
-
データの結合・統合処理:
- 【第11回】concat関数 – 行や列の方向に沿って簡単に連結
- 【第12回】merge関数 – 複数のDataFrameを結合(SQL的な結合)
-
不要データの削除や前処理:
- 【第15回】drop/dropna/drop_duplicates– 不要な行・列や欠損・重複データの削除
DataFrame を使いこなすことで、手作業では時間のかかるデータ処理を自動化し、より高度な分析に進むことができるようになります。
Pandas DataFrame の基本的な構造
DataFrame は、以下の要素から構成されます。
- データ: 表の中身の値。様々なデータ型(数値、文字列など)を持つことができます。
- 列名 (Columns): 各列のラベル。各列は「Series」という1次元のデータ構造と考えることもできます。
- インデックス (Index): 各行のラベル。デフォルトでは0から始まる連番ですが、自由な値を設定できます。
以下の図は、Pandas DataFrame の構造をイメージしたものです。

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 を生成 することもできます。リストのリストからの作成と同様に、columns
や index
引数を指定できます。
# 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 を学ぶ上で、Series と DataFrame の「違い」を明確に理解することは非常に重要です。主な違いは以下の点です。
次元:
- Series: 1次元のデータ構造
- DataFrame: 2次元のデータ構造(行と列)
構造:
- Series: データが縦一列に並び、それぞれのデータにインデックス(ラベル)が付いています。
- DataFrame: 行と列を持つテーブル形式で、各列には列名が、各行にはインデックスが付きます。
-
操作性:
-
データの選択や操作を行う際のコードの書き方に違いがあります。例えば、
DataFrame からは列名で特定の列(Series)を選択したり、
.loc
や.iloc
を使って行や特定の要素を選択したりします。 一方、Series からはインデックス名や位置で要素を選択します。 -
「
[]
で取得すると Series(1次元)、[[]]
で取得すると DataFrame(2次元)になります。」という違いも重要なポイントです。 - これらの具体的な操作方法については、以下の記事で詳しく解説しています:
この違いを理解することで、どのようなデータをSeriesで扱うべきか、 DataFrameで扱うべきかが明確になり、より効率的にコードを書けるようになります。
-
データの選択や操作を行う際のコードの書き方に違いがあります。例えば、
DataFrame からは列名で特定の列(Series)を選択したり、
以下の図は、この構造の違いを視覚的に示したものです。
✅ まとめ
この記事では、Pandasデータ分析 の要となる Pandas DataFrame の基本的な構造と、pd.DataFrame()
メソッドを使ったリストや辞書からの「基本的な作り方(生成方法)」を徹底解説しました。
また、DataFrame を構成する要素とも言える Pandas Series の概要や、Series と DataFrame の根本的な「違い」(次元、構造、操作性)についても理解を深めました。
これらの Pandas の基礎を固めることで、データ分析の様々なステップに進む準備ができました。
Pandas DataFrame を使いこなすためには、作成方法だけでなく、その後のデータ操作が非常に重要になります。ぜひ、次回以降の記事も参考に、Pandas DataFrame でのデータ分析スキルをステップアップさせていきましょう。

コメント