皆さん、こんにちは。
南波真之(なんばさねゆき)と申します。
私はエンジニアではない文系の人間ですが、Pythonの可能性やデータ分析を使った仕事に興味があります。
前回はPythonの標準機能に追加しての数値計算や多次元配列を利用できるNumPyの機能であるユニバーサルファンクションとブロードキャストについて取り上げてきました。
ユニバーサルファンクションは一括で配列内のデータを変換してくれる機能、ブロードキャストは配列の内部データに直接演算を行える機能です。
さて、今回はpandas(パンダス)です。私が勉強しているPythonによるあたらしいデータ分析の教科書(翔泳社)の、P133.〜P.143の部分にある、pandasのDataFrame(データフレーム)について学習してみました。
pandasとは?
pandasとは、Pythonでのデータ分析を容易にするような機能のライブラリです。データ分析のツールとしてはとてもよく使われているものです。
データ分析をする際には、手元にあるデータをまず整理するところから始まります。これを前処理と呼ぶこともありますがこのデータ整理で大きく効力を発揮します。
pandasは、NumPyを基盤にして2つのデータ型があります。1次元データのSeries(シリーズ)と2次元データのDataFrame(データフレーム)です。今回はよく使われるDataFrameについて学習します。
初めてpandasを使う場合は、まずpipを使ってインストールするところから始めます。
pip install pandas |
pandasを使うには NumPy同様に以下のようにインポートを行います。
import pandas as pd |
DataFrame(データフレーム)
DataFrameは2次元のラベル付きのデータ構造のことです。表のような形式になるため、ExcelやSpreadsheetのようなイメージが作れます。
まずは例を見てみます。
import pandas as pd df = pd.DataFrame({ # ディクショナリ型でデータを入れてみる ‘名前’ :[‘田中一郎’, ‘山田次郎’, ‘高橋三郎’], ‘社員ID’ : [32, 103, 3], ‘役割’ : [‘営業本部長’, ‘マーケティング部’, ‘COO’], ‘趣味’ : [‘マラソン’, ‘ソロキャンプ’, ‘海外旅行’] }) df |
この出力結果はこちらです。

Excelのような表の形式になっていますね。
この表の0~2の縦部分をindex(インデックス)、名前〜趣味までの横のことをcolumns(カラム)といい、知っておくと便利です。
それは、様々な記述方法において、indexとcolumnsを指定することができるからです。
1.上記のソースコードにてindexを編集する
df = pd.DataFrame({ # ディクショナリ型で入れてみる “名前” :[“田中一郎”, “山田次郎”, “高橋三郎”], “社員ID” : [32, 103, 3], “役割” : [“営業本部長”, “マーケティング部”, “COO”], “趣味” : [“マラソン”, “ソロキャンプ”, “海外旅行”] }) df.index = [“001”, “002”, “003”] df |

2.リストを使って表現
df = pd.DataFrame([[“田中一郎”, 32, “営業本部長”, “マラソン”], [“山田次郎”, 103, “マーケティング部”, “ソロキャンプ”], [“高橋三郎”, 3, “COO”, “海外旅行”]]) df.index = [“001”, “002”, “003”] df.columns = [“名前”, “社員ID”, “役割”, “趣味”] df |

このように、indexとcolumnsは指定できるためよりわかりやすく表示を編集することができます。
pandasのデータ型 object型について
先程のソースコードで出力されたデータの中で、社員IDだけが整数(int型)で、その他がobject型という扱いになります。それを確認してみます。
import pandas as pd df = pd.DataFrame({ # ディクショナリ型で入れてみる ‘名前’ :[‘田中一郎’, ‘山田次郎’, ‘高橋三郎’], ‘社員ID’ : [32, 103, 3], ‘役割’ : [‘営業本部長’, ‘マーケティング部’, ‘COO’], ‘趣味’ : [‘マラソン’, ‘ソロキャンプ’, ‘海外旅行’] }) print(df.dtypes) |
データタイプを見てみます。
名前 object 社員ID int64 役割 object 趣味 object dtype: object |
整数の社員IDがint型、それ以外がobject型になっています。
pandasは列ごとにデータ型を持っており、これはpandas特有のデータ型です。文字列を含むデータは、object型に指定されます。1つの列に整数と文字列が混在している場合もobject型になります。
データの出力指定
また、今回はデータが少ないので必要ありませんでしたが、データ量が多い場合は最初の5行だけ、最後の5行だけを表示させるということもよくあります。
例えば、このようなデータがあったとします。
import numpy as np import pandas as pd df = pd.DataFrame(np.arange(100).reshape((25, 4))) df |
出力結果の一部を紹介しますが、このようにデータ100個が25行4列で出力されます。

ただし、これでは見るのが大変ですので df.head() や df.tail() を使って最初もしくは最後の5行を表示させることができます。
df.head() |

df.tail() |

データの取り出し方法
特定のデータのみを出力して取り出したいということはよくあります。こういった場合は、indexとcolumnsを指定して取り出します。
df.loc[取り出したい行, 取り出したい列]
と記述するのですが、こうなります。
df.loc[:, [“名前”, “役割”]] |

: はすべてという意味ですのでindex(行)はすべて、columns(列)は名前と役割のところだけを取り出しました。
ちなみに、似たやり方でilocというのもあり、これはindex番号とcolumns番号を指定して取り出すというものです。プログラムの世界では最初は0から始まりますので、例えば以下のように取り出すとどういったデータになりそうでしょうか。
df.iloc[1:, 1:] |
答えは、こちらです。

このような形で、pandasのDataFrameを理解することでデータの整理や表現の仕方が大きく幅ができるようになります。
DataFrameを活用することで
いかがでしたでしょうか。
今回は、pandasのDataFrameをメインに書いてきました。
Pythonにおけるデータ分析でpandasは使われることが多く、身につけておきたい知識の1つです。
理解すべき項目も多いですが、細かい部分を理解しておくことで応用が効くようになると思いますので、頑張りましょう。
インターネットアカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。
よく、「プログラミングは独学でもなんとかなる」という情報もありますが、新しいことを学んでいく際の近道は「プロに教えてもらうこと」だと思います。
インターネットアカデミーはキャリアサポートも充実しており、一人ひとりに専任のキャリアプロデューサーがサポートしてくれるため中途半端になることがありません。
ご興味ある方は各講座のページを覗いてみてください。無料カウンセリングもできます。
- Pythonの基礎からDjangoフレームワークを使ったWebアプリケーションを作りたい方向けの「Python講座」
- Pythonを活用したAIプログラミング、機械学習を実装したい方向けの「AIプログラミング講座」