こんにちは、はやたす(@hayatasuuu )です。
前回の記事では、Pandasの特徴と、Pandasを使ってできることを紹介しました。
»前回の記事 : #1 Pandas入門 | Pandasとは?Pandasを学習すべき3つの理由も解説
前の記事で、Pandasを学習するメリットは理解できたかと思います。これ以降の記事では、Pandasで重要になる文法を解説していきます。
今回の第2回目では、PandasのコアになるDataFrame(データフレーム)を紹介します。
Pandasを使うなら、特にDataFrameの取り扱いは非常に重要です。Pandasのお作法は、DataFrameに始まって、DataFrameに終わります。
一度で納得できない部分があったら、ぜひ復習しながら学習を進めていきましょう。
コードを実行し始める前に、以下のライブラリをインポートしておきます。
import numpy as np
import pandas as pd
※Numpyは今回使っていませんが、Pandasとセットでインポートすることが多いです!
Contents
Pandas.DataFrameとは?
DataFrame(データフレーム)とは、二次元の表形式をしたPandasオブジェクトのことです。
イメージ図が以下になります。

「二次元」という言葉が難しいかもしれませんが、これは「”縦”と”横”を持っている」という意味になります。
Excelやスプレッドシートの利用経験があれば、イメージはそれと同じです。Excelやスプレッドシートでは、”縦”や”横”のことを以下のように呼びます。
- 縦 : 行(=row)
- 横 : 列(=colomn)
Pandasでも同様で、縦のことを「行」、横のことを「列」と呼びます。

Python上でまとまったデータを扱うとき、リストや辞書を使いますよね。でも、これらのデータ構造でデータ分析に対応しようとすると、やはり不便な部分があります。
では「どうすればスムーズにデータ分析できるか」と考えたとき、やはりExcelやスプレッドシートのような表形式で表示されているデータが思い浮かぶはずです。
事実、プログラミングを使わないデータ分析では、Excelが使われていますよね。
Pandasでは、DataFrameという表形式のデータを操作することで、スムーズなデータの加工・集計・可視化が可能です。
Pandas.DataFrameの作成方法
Pandas.DataFrameには、いくつかの作成方法があります。
- パターン① : 二次元リストから作成
- パターン② : 辞書から作成
- パターン③ : 辞書を格納したリストから作成
実は他にも作成方法がありますが、結局はほとんの場合で上記に集約できます。
今回は「名前・数学の得点・英語の得点」が格納された以下の表を作るコードで、上記の3パターンを比較していきましょう。

パターン① : 二次元リストから作成
1つ目が二次元リストから作成するパターンです。ここでは、以下のようなコードを作成してみましょう。
df = pd.DataFrame([
['A君', 46, 58],
['Bさん', 36, 90],
['C君', 50, 74],
['D君', 85, 68]
])
上記のように、リスト内にリストを格納することで、いま見ている形式でDataFrameを作成できます。
作成したDataFrameの中身を確認するには、以下のようにNotebookのセル内でdf
を書いて実行します。

この方法は、作成したリストと同じ見た目で出力されるので、直感的に分かりやすいと思います。
あとは、デフォルトだと列名(=カラム名)が付いていません。DataFrameにカラム名を付与するには、作成時にcolumns=カラム名のリスト
で引数にリストを渡してあげます。
df2 = pd.DataFrame([
['A君', 46, 58],
['Bさん', 36, 90],
['C君', 50, 74],
['D君', 85, 68]
],columns=['name', 'math', 'english'])

これで目的としているDataFrameを作成できました。
パターン② : 辞書から作成
2つ目が辞書から作成する方法です。細かい解説をするより、先にコードを見てみましょう。
df3 = pd.DataFrame({
'name': ['A君', 'Bさん', 'C君', 'D君'],
'math': [46, 36, 50, 85],
'english': [58, 90, 74, 68]
})
上記のように{カラム名: 中身になるリスト}
を格納した辞書を渡すことで、以下のDataFrameを作成できます。

リストからDataFrameを作成するときは、リストが横向きになっていました。
でも、辞書を元にデータフレームを作成するときは、各Keyに対応するValueが縦に入っています。
パターン③ : 辞書を格納したリストから作成
3つ目が辞書を格納したリストから作成するパターンです。少しややこしいですが、渡すものとしてはリストになります。
これに関しても、先にコードを見てみましょう。
df_list = [
{'name': 'A君', 'math': 46, 'english': 58},
{'name': 'Bさん', 'math': 36, 'english': 90},
{'name': 'C君', 'math': 50, 'english': 74},
{'name': 'D君', 'math': 85, 'english': 68}
]
df4 = pd.DataFrame(df_list)
※分かりやすいようにpd.DataFrame()
で渡すリストを先に作成しています。
これが辞書を格納したリストからDataFrameを作成する方法です。出力結果を見てみると、df2
やdf3
と同じで目的にしているDataFrameを作成できていますね。

以上が、DataFrameを作成する3つの方法でした。
Pandas.DataFrame : おすすめの作成方法
結論、基本的には「パターン① : 二次元リストから作成」でDataFrameを作成するのがおすすめです。
その理由は、パターン①だとpd.DataFrame()
に渡すオブジェクトの作成が速いからです。
各パターンでpd.DataFrame()
に渡しているオブジェクトは、以下のとおりでした。
- パターン① : リスト in リスト
- パターン② : 各Keyに対応するリスト
- パターン③ : リスト in 辞書
このうち、パターン①で使用する「リスト in リスト」が、最も高速に作成できるということになります。
ただし、他の方法をまったく使わないというわけではありません。
例えば、APIで取得したデータをDataFrameに変換するならパターン③が有効です。なぜなら、APIで取得するデータのほとんどはJSON形式になっているからです。
要は使い分けが重要になってきます。場面によって、最も適切な方法でDataFrameを作成できるように、3パターンとも習得しておきましょう。
まとめ : Pandas.DataFrameの作成方法
というわけで、この記事ではPandas.DataFrame
の作成方法を紹介しました。
ネット上の記事を見ていると「DataFrameの作成はあまり使われない」と書かれていますが、決してそんなことはありません。
DataFrameの作成もちゃんと使っていく文法なので、しっかりおさえておきましょう。
この記事では、一からDataFrameを作成しましたが、データ分析が主な目的だとCSVやExcelファイルを読み込みからスタートします。
なので、次回の記事ではCSVやExcelを読み込んで、DataFrameに落とし込む方法を紹介します。
この講義シリーズは、本当に重要な部分だけ紹介していくので、ぜひ毎回の内容を消化していただけると嬉しいです!