Pandas入門

#2 Pandas入門 | Pandasのコア : DataFrameの特徴と作成方法を徹底解説!

panda-dataframe

こんにちは、はやたす(@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とセットでインポートすることが多いです!

 

Pandas.DataFrameとは?

 

DataFrame(データフレーム)とは、二次元の表形式をしたPandasオブジェクトのことです。

イメージ図が以下になります。

panda-dataframe-sample1

「二次元」という言葉が難しいかもしれませんが、これは「”縦”と”横”を持っている」という意味になります。

Excelやスプレッドシートの利用経験があれば、イメージはそれと同じです。Excelやスプレッドシートでは、”縦”や”横”のことを以下のように呼びます。

  • 縦 : 行(=row)
  • 横 : 列(=colomn)

Pandasでも同様で、縦のことを「行」、横のことを「列」と呼びます。

panda-dataframe-sample2

 

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を書いて実行します。

panda-dataframe1

この方法は、作成したリストと同じ見た目で出力されるので、直感的に分かりやすいと思います。

あとは、デフォルトだと列名(=カラム名)が付いていません。DataFrameにカラム名を付与するには、作成時にcolumns=カラム名のリストで引数にリストを渡してあげます。

df2 = pd.DataFrame([
    ['A君', 46, 58],
    ['Bさん', 36, 90],
    ['C君', 50, 74],
    ['D君', 85, 68]
],columns=['name', 'math', 'english'])

 

panda-dataframe2

これで目的としているDataFrameを作成できました。

パターン② : 辞書から作成

2つ目が辞書から作成する方法です。細かい解説をするより、先にコードを見てみましょう。

df3 = pd.DataFrame({
    'name': ['A君', 'Bさん', 'C君', 'D君'],
    'math': [46, 36, 50, 85],
    'english': [58, 90, 74, 68]
})

 

上記のように{カラム名: 中身になるリスト}を格納した辞書を渡すことで、以下のDataFrameを作成できます。

panda-dataframe3

リストから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を作成する方法です。出力結果を見てみると、df2df3と同じで目的にしているDataFrameを作成できていますね。

panda-dataframe4

以上が、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に落とし込む方法を紹介します。

この講義シリーズは、本当に重要な部分だけ紹介していくので、ぜひ毎回の内容を消化していただけると嬉しいです!