初心者から始めるPythonの最強ライブラリPandasの使い方を徹底解説

機械学習においてデータの前処理は時間がかかる作業です。そこでPythonのライブラリPandasを使うことにより前処理が効率化され、作業時間を大幅に短縮できます。今回はPythonのライブラリPandasとは何か、活用するメリット、効果的な学習方法などをご紹介します。

PythonのPandasライブラリとは

プログラミング教育や初心者向けのプログラミング言語に使われるほど、分かりやすい文章が特徴的なプログラミング言語の一つであるPython。Pythonは初心者でも使いやすく、アプリ開発やWebサイト構築など、さまざまな分野で活用できるプログラミング言語です。2020年時点においてはプログラミング言語人気ランキング世界2位を記録しています。従来のPythonはYouTube・Googleのバックエンド・3DグラフィックスのBlender・オンライン決済サービスのPayPal・クラウド環境構築のOpenStackなどにおける安定的運用を支えていましたが、最近ではAI関連ビジネスで使用されるようになったため、さらに注目を集めています。

PandasはPythonを使ったデータ分析において欠かせないライブラリの一つで、人工知能開発の分野においては特に無くてはならないライブラリです。ライブラリとは本来、目的に応じた機能を詰め込んだツールですが、Pandasは数表や時系列データなどの大容量データの操作に特化しています。通常の表計算ソフトは人間が手動で操作しなければなりませんが、Pandasを使えばコンピューターを作動し続けるだけで、自動で繰り返し作業を行なってくれるため、作業の手間を大幅に省くことができます。

PythonのPandasライブラリの特徴

PythonのPandasライブラリにはさまざまな特徴があります。Pandasはオープンソース(BSDライセンス)で公開されており、誰でも無料で利用できる点が大きな特徴です。Pandasを利用するためには、Anacondaなどの「ディストリビューション」と呼ばれるパッケージをダウンロードする必要があります。Pandasの利用方法はほかにもありますが、Anacondaはデータ分析やグラフ描画など、Pythonでよく利用されるライブラリを含んでいるためおすすめです。インストール方法については、下記で具体的にご紹介しています。

なお、Pythonでよく使われているライブラリは次の3つです。

  • Pandas
  • Matplotlib
  • NumPy

Matplotlibは2Dや3Dのグラフを描画するライブラリ、Numpyは数値計算や演算処理を行うライブラリです。これらのライブラリは相互的に組み合わせて利用されています。

PandasはNumpyを使いやすく拡張したライブラリです。PandasとNumpyをうまく使い分ければ、より作業を効率的に進めることができます。Numpyは機械学習やディープラーニングなどの膨大な数値データを高速に扱う処理に使用し、Pandasはデータの取り込みや加工、集計処理、数値以外のデータ処理などに使用しましょう。

次にPandasを使うと、Pythonによるデータ分析で下記を効率よく作業できるようになります。

  1. データの読み込みや統計量の表示
  2. グラフ化
  3. データ分析

また、Pandasは主にシリーズ(Series)という一次元データ型と、データフレーム(DataFrame)という二次元データ型があります。特にデータ操作を目的とした高速で効率的なデータフレーム (DataFrame) オブジェクトは、Pandasが人気を集める理由の一つにもなっています。データフレームオブジェクトとは表作成機能であり、多種多様なデータを一つにまとめて管理できる機能です。シリーズとデータフレームについては、下記で詳しく解説します。

さらに、PandasはC言語などと比較してもロジックが簡素化されており、使いやすい文法で構成されている点も特徴です。Pandasの主要なコードはPythonまたはC言語を使って書かれていますが、前述の通りPythonは初心者でも使いやすく分かりやすい文法です。なお、PandasはCSV・テキストファイル・Excel・SQLデータベース・HDF5フォーマットなど、データ間で相互に読み書きするためのツール群でもあります。

Pythonが世界中で学ばれている理由

Pythonは現在のAI技術開発で欠かせないプログラミング言語です。PythonはJava・C・C++、JavaScriptと並び、世界で多く利用されているプログラミング言語の一つです。Pythonが支持を得ている理由は、下記の点が考えられます。

Pythonのライブラリを使えば、AIの機械学習や深層学習のプログラミング作業を効率化できる点です。機械学習のデータの前処理に要する時間は全体の7割を占めるとされています。そこでPythonのライブラリであるPandasを使えばデータの前処理にかかる時間を短縮できます。前処理の時間を短縮できれば、大幅な作業の効率化が可能です。特にPandasは一度設定をしてしまえば、自動的に繰り返し処理を行えるようになります。データ処理が終わるまで人間が付きっきりで操作をする必要がなくなるため、今までデータ処理に費やしていた労力を他の業務に費やすことができます。

また、Pythonを習得すれば就職先が見つかりやすい点も学ばれている理由として挙げることができるでしょう。国内でもPythonを使ったWebサービスやAI関連のビジネスの利用が増えており、Pythonを使いこなせるプログラマーの求人が非常に多くなっています。Pythonを使いこなすスキルとして、Pandasの習得は必須となるため、Pandasを習得することは大きなメリットとなるでしょう。

*検索結果1189企業3332求人(転職・求人サイトGREENの2021年10月のデータ)

https://www.green-japan.com/search_key/01?key=85lwcp87rmgmpjgjt7l3&keyword=Python

Pandasを使うメリット

Pandasを使うメリットは数多くあります。

例えば、CSV、テキストファイル、Excel、SQLデータベース、HDF5フォーマットなど、多様な形式のデータを読み込むことができます。これらの形式で作成されたデータを読み込む際、特に初心者の方は変換作業に煩わしさを感じる方も少なくありません。しかし、Pandasであれば互換性に優れているため煩雑な変換作業をすることなく、データ間で読み書きできるようになります。

また、大量のデータ処理に強い点もメリットです。Pandasはパソコンの容量範囲内であれば、大量のデータをDataFrameに読み込んで処理できます。大量のデータを読み込めるからといって速度が遅くなることはなく、表計算ソフトと同程度の速度で使用可能です。5Gなどの大容量データ通信で送受信する膨大なデータ分析も効率よく処理できます。

同じ処理を何度も自動で再実行できるため、プログラマーの作業が大幅にカットできる点もメリットです。従来のライブラリは人間の手作業で操作をしなければなりませんでした。しかし、Pandasは「プログラム」として記述しておけば、何度でも同じ作業を自動で行えます。プログラムで自動的に処理できれば、確実に同じ作業を繰り返すことができ、さらにはデータ処理にかかる数日〜数週の期間に付きっきりで操作をする必要もなくなります。これにより、データ処理に割いていた時間を、他の作業に回すことが可能です。

Pandasの他のライブラリと連携して、多彩なプログラム作成機能を発揮します。例えば、Matplotlibを活用してグラフを描画する、NumPyを活用して加工した結果を表計算ソフトのファイルとして出力するなど、Pandasのみでは不可能な機能も利用できます。

PythonのPandasライブラリにできることは

先ほどPandasを使えば作業を効率化できると紹介しました。では具体的にどのような作業を効率化できるのでしょうか。ここからはPandasを使って効率化できる作業を詳しくご紹介します。効率化できる主な作業は下記の通りです。

  • データの読込:CSV・Excel・RDBなど他のデータフレームの情報を入出力できる
  • データ前処理の効率化(NaN / Not a Number、欠損値など)
  • 複数のデータを結合・部分的に取り出し(スライス)・ピボッド処理ができる
  • データの集約とグループ演算、統計処理や回帰処理を効率的に行なう

ここからはそれぞれの作業の効率化について具体的に説明します。

Pandasのデータ読込機能と特長の把握

Pandasを使用する上で、大きな特徴として挙げられる機能がデータ読込機能です。PandasではCSV・Excel・JSON文字列・pickle形式(Pythonオブジェクトを保存する形式)のデータ読込または書込・株価や為替などマーケット情報の読込が可能です。具体的には下記の3点が行えます。

  • データの特徴(info)、要約統計量(describe)、形状(shape)の表示
  • データの一部表示(head()・tail())
  • 行数(index.values)、列名(columns.values)、列の型(dtypes)の取得

データを読み込む際は事前にPandasをインポートしておかなければなりません。データの読み込みにはread_csv()を使います。基本的にCSV形式で読み込みますが、xlsx形式のデータを読み込みたい場合にはxlrdをインストールします。読込はCSV形式と同様の記法です。

データの切り出し(スライス)や並び替え作業

必要なデータの抽出、並べ替える、列名を変更することも可能です。行・列から好きなようにデータを抽出したい場合には、df.locを用います。一方で、インデックス番号で指定して抽出したい場合にはdf.iloc[]を用います。

  • スライス(DataFrame[]、iloc[]、loc[])やフィルタリング
  • 値による並べ替え(sort_values)、インデックスによる並べ替え(sort_index)
  • 列名の変更(rename)

異なるデータを結合したい場合にはmerge()またはconcat()を使用します。merge()は横結合のみですが、concat()は縦結合も可能です。

データの可視化(Matplotlibのimportが必要)

グラフや図などでデータを可視化したい場合には、Pandasのみでは不可能なため、あらかじめMatplotlibをインポートする必要があります。Matplotlibを活用すれば、下記のデータを可視化できます。

  • ヒストグラム(hist)
  • 散布図と線グラフ(plot)
  • 棒グラフ(bar)
  • 箱ひげ図(boxplot)

データ集計

データ分析においてデータの集計を行うことも必要不可欠です。データをうまく集計して加工すれば、モデル構築時の精度を上げることができます。

簡単に要約統計量を確認したい時に使用するメソッドがdf.describe()、出現の回数を測る際に使用するメソッドがdf.value_counts()です。また、ある項目をキーにして集計する場合にはdf.groupby()、ある値をキーにしてデータフレームをソートする場合にはdf.sort_values()を使います。

それぞれの具体的な操作方法は下記で解説しています。

欠損値の処理

欠損値処理を行えば、簡単に欠損値を確認できます。欠損値処理は、欠損値に適正な値を埋める作業、欠損値が出た行を削除する作業が必要です。

欠損値の数を集計する際にはdf.isnull()を使用し、欠損値が1つでも入っている行を削除したい場合にはdf.dropna()を使用します。さらに、欠損値を埋めたい場合にはdf.fillna()を使います。

そのほかにも、カテゴリー変数を展開し、列同士の相関を確認することも可能です。

PythonでPandasライブラリを使うための準備

PandasはPythonの拡張機能ですから、標準ではインストールされていません。そこで利用の際は別途インストールが必要です。なお、Pandasはオープンソースライブラリのためダウンロードは無料です。

ここからは、Pandasのインストールとインポート、設定確認の手順をご紹介します。

Pandasのインストール

Pandasのダウンロード手段はいくつかありますが、最も簡単な方法はpipを利用する方法です。pipとは、Pythonのパッケージを簡単にインストールするための管理ツールです。

また、pip以外ですとAnacondaをインストールしてPandasをダウンロードする方法もあります。Anacondaとはデータサイエンス向けのプラットフォームです。さまざまなツールのコンパイル済みバイナリファイルを提供しており、Pythonの利用環境を簡単に整えることができます。

pipとAnacondaを利用したPandasのインストール方法は下記の通りです。

pipを利用してインストールする場合

pipを利用する場合は次のコマンドを入力します。

$ pip install pandas

これを入力していれば、いつでもPandasが呼び出せるようになります。

AnacondaをインストールすればPandasが使える

AnacondaのPythonディストリビューション(開発環境をまとめたパッケージ)をインストールすると、Pandasが利用できます。つまり、すでにAnacondaをダウンロードしている方は、新たにインストールする手間を省くことができます。Anacondaは下記からダウンロード可能です。

AnacondaのダウンロードURL:

https://www.anaconda.com/products/individual#Downloads

ただし、例外として環境が古いまたはアンインストールしてしまっている場合には、condaを利用してPandasをインストールする必要があります。condaはAnacondaにおけるライブラリ管理ツールです。condaからインストールする場合には、インストール後にコマンド「conda list」にインストールしたPandasが表示されていることを確認してください。表示されていればインストール完了です。インストールが完了し、次回Pandasを利用する場合には、「import pandas as pd」とインポート文を記述してPandasのライブラリを読み込んでください。

Pandasのインストール手順

  • Anaconda Navigatorを起動
  • Environmentsから「Not installed」を選択して、「pandas」を検索
  • 一覧に表示されたライブラリからPandasを選んでインストールします
  • この時に、必要と思われるライブラリもインストールする(scikit-learn、numpy、matplotlibは必須)
  • インストール後に「conda list」とコマンドを入力すれば、Pandasが表示されていることを確認できる

以上でPandasのインストールが完了

注意点として「Python2.7」は古いバージョンで、2020年4月にサービスの提供を終了しています。どうしても必要な場合を除き、インストールする必要はありません。

Pandasをインポートする

Pandasを実際に使用するためにはインストールするだけではなく、インポートをする必要があります。

Pandasを読み込む際は、以下のコマンドを入力してください。

import pandas as pd

上記のコマンドでPandasを「pd」で表記していますが、この表記は好きな名前にしても構いません。使いやすい名前で設定してください。

また、Pandasをインポートする際に、併せてサンプルデータセットも利用できるようにしておいてください。サンプルデータセットは設定が正しく行えているかを確認するために必須です。サンプルコードの設定確認については下記で解説します。

サンプルコードで設定確認

インストールしたPandasを活用する前に、サンプルコードで試運転をします。サンプルコードはさまざまなタイプがあり、専門サイトから無料で利用できます。使用しやすいサンプルコードで試運転をしてください。

試運転をし、サンプルコードを使ってコードが正しく変換されていれば問題なく使用できます。

PythonのPandasライブラリの基本的な使い方

Pandasを問題なくインストールできたら、早速活用しましょう。ここからはPythonのPandasの基本的な使い方をご紹介します。

Pandasの基本データ型は2種類

Pandasの基本データ型は「シリーズ」と「データフレーム」の2種類です。シリーズは列、データフレームは複数の列で構成されています。具体的には下記の通りです。

シリーズ

シリーズはデータ(values)と行ラベル(index)からなる1次元構造で、辞書型とは違いデータに順番があります。1次元構造とは1つの観測対象に対し、1つの測定値を作る構造です。

シリーズのオブジェクトは、リスト・配列・辞書から作成できます。基本機能は作成・参照・要素の追加・削除・インデックスなどです。

Numpyも1次元配列ですがNumpyとは違い、インデックスでデータに名付けできる特徴があります。

データフレーム

データフレームは2次元のデータ構造で、複数の行と列から構成されるデータ群を指します。2次元データとは、1つの観測対象に対し、2つの測定値があるデータです。Pandasには複数のデータ型がありますが、データフレームは最も多く使用されているデータ型です。

列には列名(データの内容を表す)が、行には行名(インデックス)が付けられます。DataFrameからスライス(切り取り)した1行・1列はシリーズと呼応します。

データフレームへのインデックス追加と削除

データフレームでインデックスを設定するためには「set_index」を使います。ただし、インデックスは設定後に変更することはできないため注意が必要です。変更をしたい場合にはインデックスを削除して再度設定し直す必要があります。

具体的には下記の通りに入力します。

DataFrame.set_index(インデックスに指定する列名, inplace = True/False)

inplaceをTrueにすれば実行結果が保存され、何も指定しなければFalseを入力します。False入力した場合は保存されません。

インデックスは複数の列に指定することも可能です。

複数の列にインデックスを指定することを「階層型インデックス」と呼びます。

インデックスの解除は「reset_index」を使用します。インデックスを解除すると、インデックスは連番に戻ります。「reset_index」はインデックスを変更したい場合にも使用可能です。前述の通り、インデックスは一度設定すると変更できず、設定し直す必要があります。変更したい場合には「reset_index」でインデックスを一度解除し、再度設定し直します。

Pandasのデータフレームにおける列のソート(並び替え)

Pandasのシリーズまたはデータフレームは、さまざまな方法でソート(並べ替え)できます。ソート方法は複数ありますが、主なソート方法は「設定した列の値によるソート」または「インデックスによるソート」です。

指定した列の値によるソートは「sort_values」を使います。引数ascendingにTrueを指定すると昇順(小さい順)、Falseを指定すると降順にソートされ、指定をしなければTrueの昇順にソートされます。

一方でインデックスによるソートは「sort_index(任意の引数)」を使います。「sort_values」同様、引数ascendingにTrueを指定すると昇順、Falseを指定すると降順にソートされ、指定しなければ昇順にソートされます。

データの参照と抽出

すべてのデータを表示し、そこから必要なデータを探す方法は手間がかかります。そこで一部のデータのみを参照したい場合には下記の方法が有効です。

head()とtail()

最初の数行または最後の数行のみを確認したいなど、行数を指定したい場合には「head(行数)」を使います。引数では行数を入力しますが、入力しなかった場合には最初の5行が表示されます。

次に、最後から指定した行数のみを表示したい場合には「tail(行数)」を使用します。行数の指定が無い場合には最後の5行が表示されます。

locとiloc

データフレームでデータを抽出する場合、行番号、インデックスや列名を指定できます。複数の行と列を同時に指定してデータを抽出したい場合には、locやilocを使います。

locはデータフレームからインデックスと列名を指定してデータを抽出できるメソッドです。一方でilocは、データフレームから行・列番号を指定してデータを抽出できるメソッドです。また、loc、ilocともにスライシングも使うことができます。

条件指定でデータ抽出(query)

複数条件、範囲指定、日時・日付・年月日の抽出など、ある条件を満たすデータだけを抽出することも可能です。

日時・日付・年月日など、1つの条件を指定する場合には、[]の中に指定したい条件を入力します。日付で条件を指定したい場合には、日付は文字列型になっているため日付型に変換してから抽出しなければなりません。日付型へ変換するには「pd.to_datetime」を使います。なお、日付や時刻に対して操作をする場合には、あらかじめdatetimeモジュールから、datetimeクラスをインポートする必要があります。

次に複数条件を指定して抽出したい場合には「| (or)」を使います。手順は下記の通りです。

  • 比較演算子を使った条件文を括弧で括る/論理演算子は| (or)を使って2つの条件文をつなげる
  • 「&(AND)」/「~(NOT)」を使って情報を抽出する

ただし複数の条件を指定する場合は下記の注意点があります。注意点を満たしていないとエラーが表示されます。

  • 条件文同士を論理演算子でつなげる必要がある
  • 比較演算子を使うときは条件ごとに括弧で囲む必要がある
  • 条件文が3つ以上ある場合は演算子の優先順位に注意する

データの入出力

Pandasを利用すると、次の4種類のデータにおいて入出力が可能となります。

  1. テキストファイルからのデータ読み込み
  2. バイナリ式ファイルからのデータ読み込み
  3. データベースからの読み込み
  4. Web上にあるデータの読み込み

特にオフィスワークでは、CSVファイルとExcelファイルからの読み込み・書き込み作業が多く、Pandasが大きな力となるでしょう。

CSVでファイルを読み込む場合は「read_csv」を使い、データを出力したい場合には「to_csv」や「to_excel」を使います。また、Excelからデータを読み込む場合は「read_excel」を使い、データを出力したい場合は「to_excel」を使います。CSV、Excel以外ですと「read_json」「read_sql」などがあります。

欠損値の処理

データ分析における欠損値(データに含まれる値が無い部分)は、行または列を削除するか欠損値を0などに置き換える処置を講じます。

Pandasの欠損値は「NaN」と表示され、これを扱うメソッドは「dropna・fillna・isnull・notnul」4種類があります。それぞれのメソッドは下記の通りです。

「dropna」はデータ列を指定の軸方向に見て、欠損値の有無が指定の条件を満たしている場合にデータ列を削除します。「fillna」は欠損値を指定の値または指定の方法で埋めるメソッドです。「isnull」はデータの要素ごとに、元のデータと同じサイズのオブジェクトを返すメソッドです。NaNはTrue、それ以外をFalseとして扱います。「notnull」はisnullとは逆の真偽値を返すメソッドです。

なお、欠損値の補完には「fillna命令」を出します。欠損値の補完とは、欠損値を0などに置き換える方法です。

Pandasには、このほかにも時系列データの分析、ピボットテーブルの作成、クロス集計、データフレームの結合(Union・Join)などの機能が用意されています。これらを活用すれば、データ分析をより充実した内容にしてくれます。必要に応じてこれらの機能の操作方法も習得しましょう。

PythonのPandasライブラリに適用する関数(map, applymap, apply)

Pandasのシリーズやデータフレームなどのオブジェクトは関数の適用が可能です。要素・行・列のいずれに適用するかでメソッドが異なります。そこでここからはそれぞれのメソッドを紹介します。

まずは要素(スカラー値)に対する関数のメソッドです。シリーズの各要素に適用するメソッドは「 map(), apply()」、データフレームは「applymap()」です。

一方で行・列(一次元配列)に対する関数のメソッドは、データフレームの各行・各列に「 apply()」を適用します。

なお、どのメソッドも一度設定したオブジェクトの関数は変更できません。これは、dropna()やfillna()といった引数inplaceが存在しないためです。関数を設定し直したい場合には、新たなオブジェクトを元のオブジェクトに代入して上書きする必要があります。

Pandasの効果的な勉強方法

Pythonを自在に操ることができるプログラマーは、基本的にどの職場でも活躍のチャンスを与えられるでしょう。そこで、実際にデータ分析を行う上で非常に重要となるPandasの習得は欠かせません。

ここからはPandasを効率良く習得するための勉強法をご紹介します。

Pythonについてしっかり習得する

Pythonについて理解を深めることから始めましょう。Pythonと一言で言ってもさまざまですが、Pandasと考え方が共通しているリスト、タプルなどのシーケンスについては必ず習得してください。

Pandasの基礎を実践的に学ぶ

Pythonについてある程度の知識を身に付けたら、Pandasの基礎を実践的に学びましょう。ただし、初めからPandasすべてを習得しようとせず、基本的な使い方から学ぶことが効率的です。Pandasの基礎とはデータフレームとは何かや、列や行、インデックスの考え方などを指します。図や文字を見て理解しようとせずに、実際にプログラムを入力し、動作確認をしながら学習すればより効率良く習得できます。

Pandasの基礎を身に付けたら、データ分析にチャレンジしましょう。データ分析では下記を実践しましょう。

  • 具体的なデータを利用してデータの平均値や最小値、最大値の確認方法をマスターする
  • データをさらにグラフ化(見える化)して、データ分析の資料として見る
  • データの抽出や並べ替えをする
  • 欠損値の有無をチェックし、補完作業をおこなう

自分で学習を進めることに不安を感じる方は、プログラミングスクールに通うとよいでしょう。プログラミングスクールは数多くあるため、通いやすいスクールのうち口コミなどから自分に合ったスクールを見つけましょう。

まとめ

膨大なデータの前処理にかかる時間を大幅に削減し、作業の効率化を図ることができるPandas。これまでも世界中で活用されてきましたが、AI関連のビジネスの普及に伴い、ますます需要が高まっています。さらに、今後もAI技術が発展することは間違いありません。AI関連のビジネスにおいて欠かせないPandasをマスターすれば、さまざまな職場で活躍できる可能性が高くなります。今後プログラマーとして活躍したい場合には、Pandasを習得することは大きな武器を手に入れることを意味します。Pandasを学習する際は、実際に操作しながら効率良く学習を進めましょう。