necochan

Python for Economist [第2回]: PandasでExcelの読み書き

システム開発が本業でないなら、データ分析の結果を依頼主に提出する際、Excelなどのスプレッドシートにすることが多いと思います。ですから、Pythonでデータ分析するとき、Excelファイルからデータを読み込み、分析結果もExcelファイルに出力できると便利です。

これは、Pandasという拡張パッケージを使う(インポートする)ことで実現できます。

 

 Pandasのインポート

Pandasをインポートすると、DataFrameという「型」のPythonオブジェクトが使えるようになります。

DataFrameは、Indexというラベルの付いた行と、Columnという変数名を持った列による2次元のデータ配列で、Excelなどのスプレッドシートと似たデータ型です。

連載第1回で紹介したAnacondaというPythonディストリビューションには、既にPandasが含まれているので、新たにインストールをする必要はありません。次のように、(スクリプト[*.py]なりインタプリタなりの)冒頭でimportしておけば、すぐに使い始めることができます。

  import pandas as pd

 

 Excelファイルの読み込み

試しに、デスクトップに保存したxlsx形式の実質GDP成長率の時系列データを読み込んでみます。

book ="C:\Users\Desktop\GDP.xlsx"
sheet="sheet1"  # 読み込むシート名
EXL  = pd.ExcelFile(book)  # xlsxファイルをPython上で開く
Data = EXL.parse(sheet,index_col="TIME")

これで、Dataという名前のDataFrame型のオブジェクトが作られました。インタプリタにDataと入力して呼び出すと、下図のように時系列データが表示されるはずです。

2014-04-20_17h47_11

このとき注意が必要なのは、データの入ったxlsxシートをPandasが読み込める形に整えておくこと。1行目をアルファベットの変数名にしておき、空行をつくらずにデータを置いておくのが基本です(下図)。

2014-04-20_17h46_23

また、index_colというオプションの値を”TIME”として読み込みましたが、これは、シートの1列目にあるTIMEという日付データを「ラベル列」として使うことを指示したものです。特に指定しなければ、ラベル列は0から始まる自然数の連番になります。

一旦、DataFrame型のオブジェクトを作れば、様々なデータ処理を実に簡単に行うことができます。ここでは、記述統計とチャートの表示だけ紹介しておきます。詳しくは、Pandasの解説サイトや、こちらの解説本が参考になります。

Data.describe()    # 記述統計量を出力
Data.plot()    # チャートを出力

2014-04-21_22h16_55 2014-04-20_17h56_45

ちなみに、オブジェクトのあとに”.”を打って、そのあとに操作の名前(たとえば、”plot()”)を綴るというpythonの文法は、「メソッド」と呼ばれるものです。DataというDataFrame型のオブジェクトには、いくつかの統計処理のメソッドが備わっており、それを呼び出しています。この書き方(オブジェクト指向)が軽快なプログラミングを支えています。

 

 Excelファイルに書き込み

1. 新規ファイルに書き込み

続いて、Pythonで何か出力した結果をExcelに書き出す方法ですが、例えば、先ほどの記述統計量の一覧表をExcelファイルに保存してみます。

# 記述統計量一覧のDataFrameオブジェクトを作る
desc = Data.describe()  

# 保存先のファイルパス
outpath =  r"C:\Users\Desktop\Out.xlsx"

# 新規xlsxファイルのsheet1に保存するメソッド
desc.to_excel(outpath,"sheet1")

この方法は、新規xlsxファイルを作って保存するものです。そのため、既存のファイル名を指定した場合には、既存ファイルを消して、同じ名前の新ファイルを作ってしまいます。

2. 既存ファイルに新規シートとして書き込み

既存のxlsxファイルに新しいシートを追加する形でDataFrameを保存するには、openpyxlというパッケージのload_workbookという関数を使う必要があります。こちらもAnacondaに含まれていますので、importすることですぐに使えます。

なお、Pythonでの書き込みはUNDO[Ctrl+Z]できませんので、私は既存のxlsxファイルは念のためバックアップを取るようにしています。

import openpyxl as opx
outpath= "C:\Users\Desktop\GDP.xlsx"
newsheetname="Out" # 新規シート名

# 既存のシートを読み込み、書き込みリストに登録
book = opx.load_workbook(outpath)
writer = pd.ExcelWriter(outpath)
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

# 分析結果を新規シートに書き込み登録
desc.to_excel(writer, newsheetname)

# 書き込み
writer.save()
2014-04-21_22h19_32

 3. セルを指定して書き込み

最後に、既存のシートの特定のセルに計算した結果を入力する方法を書いておきます。例えば、GDP.xlsx、tableシートにあらかじめ作ってあるテーブルがあり、そのセルB2~B9に記述統計の数値を入力する作業を行ってみます。


editpath= "C:\Users\Desktop\GDP.xlsx"
editsheetname="table" # 既存シート名

# 既存のシートを読み込み、対象セルの値を上書き
book = opx.load_workbook(editpath)
ws = book.worksheets[book.get_sheet_names().index(editsheetname)]

# 2~9の連番で繰り返し。
# DataFrameのから入力したい数値を呼び出し、対応するセルの値を上書き
for i in range(2,10):
    ws.cell("B"+str(i)).value = desc.iloc[i-2,0]

# 変更をGDP.xlsxに上書き保存
book.save(editpath)

2014-04-21_22h21_22

以上の書き出し方を組み合わせれば、比較的自由にPythonとExcelの連携ができると思います。

例で扱った操作は、わざわざPythonを使う必要のない単純なものでしたが、ある程度大きなデータを繰り返し操作するようなルーティンワークや、本格的なデータ分析の結果をExcelで提出するには役立つと思います。

今後も紹介していきますように、Pythonをベースにして使える機能は、ExcelのVBAを書くよりも圧倒的に豊富ですので、普段Excelを多用している実務家の方にもぜひお勧めしたいと思います。

 

 Python for Economist バックナンバー

[第1回]: Anacondaのインストール

Email this to someoneShare on Google+Share on LinkedInShare on FacebookTweet about this on Twitter

6 thoughts on “Python for Economist [第2回]: PandasでExcelの読み書き

コメントを残す

Facebook Auto Publish Powered By : XYZScripts.com