普段、表形式のデータを編集したり加工する時、何を使っているでしょうか。人によってはAccessやSQLiteという人もいるかもしれませんが、大部分の人(SEは除く)はExcelなどの表計算ソフトを使っているとおもいます。標準的なIT知識を持ったサラリーマンが何かを一覧化したりリスト化するのに表計算ソフトは必須と言ってよいでしょう。
仕様書でも一覧系はExcelを使うことがよくあります。そのようなExcelからデータを読み取って加工したり表示したいというニーズは非常に多くあります。今回はそのような時に訳にたつ、pandasのread_excelメソッドについてのべます。
目次
- 事前準備
- read_exceメソッドの説明
- ヘッダを指定する header
- 行名(index)のカラムを指定する index_col
- シート名の指定 sheet_name
- 複数シートを同時に読み込む場合
- read_excelメソッドの呼び出しサンプル
- まとめ
事前準備
パッケージをインストールしておきます。
pip install openpyxl
pip install xlrd
pandasをインストールしていてい場合にはpandasもインストールしておいてください。
pip install pandas
↑目次
read_excelメソッドの説明
基本は第一引数にexcelのファイル名を与えるだけです。この場合、最初の行をヘッダとしてExcelの一番最初のシートが読み取られます。戻り値はDataFrameになります。
import pandas as pd
data_frame = pd.read_excel('ファイル名')
print(data_frame)
上記コードの緑色の部分は実際に読み込むファイル名に書き換えてください。
↑目次
ヘッダを指定始まる行数が2行目であればheader=1を指定します(最初の行を0番目、次の行を1番目と数えます)。
import pandas as pd
data_frame = pd.read_excel('ファイル名',header=行番号)
print(data_frame)
↑目次
行名(index)のカラムを指定する index_col
DataFrameでは読み込んだ行に自動で連番が付与され列名(index)として用いることができますが、列名(index)の行を指定することもできます。その場合にはindex_colで列名として読み込むカラムの名前か何番目のカラムを列名とするかの番号(0番目から数える)を指定します。
indexをカラムの順番(0始まり)で指定
import pandas as pd
data_frame=pd.read_excel('ファイル名',index_col=カラム番号)
indexをカラム名で指定
import pandas as pd
data_frame = pd.read_excel('ファイル名', index_col='カラム名')
↑目次
シート名の指定 sheet_name
シート名を指定する場合にはsheet_nameで何番目のシート(最初のシートを0番目と数える)かを指定する方法と直接シート名を指定する方法があります。
直接シート名で指定する場合は以下のようになります。
import pandas as pd
data_frame = pd.read_excel('ファイル名',sheet_name='シート名')
print(data_frame)
シート名を番号(0始まり)で指定する場合は以下のようになります。
import pandas as pd
data_frame = pd.read_excel('ファイル名',sheet_name=シート番号)
print(data_frame)
↑目次
複数シートを同時に読み込む場合
シート名をリストにすると複数シートを同時に読み取ることができます。その場合戻り値はDataFrameではなく、ディクショナリとなりキーがsheet_nameで指定してキー、値がシートから読み込んだDataFrameになります。
import pandas as pd
data_frame_dict=pd.read_excel('sample1-read-excel.xlsx',sheet_name=[番号0,番号1])
この場合戻り値はDataFrameのディクショナリとなります。
{番号0: 0番目のシートを読み込んだDataFrme, 番号1: 1番目のシートを読み込んだDataFrame}
以下のようにシート名のリストでシートを指定すると戻り値のディクショナリはシート名をキーとした形になります。
import pandas as pd
data_frame_dict=pd.read_excel('sample1-read-excel.xlsx',sheet_name=['シート名0','シート名1'])
{'シート名0': シート名0のシートを読み込んだDataFrme, シート名1: シート名1のシートを読み込んだDataFrame}
では実際にサンプルをみてみます。
↑目次
read_excelメソッドの呼び出しサンプル
以下のデータ内容でExcelを作成しておきます。
sample1-read-excel
もしexcelを直接ダウンロードするのに抵抗がある人はGoogle Spread Sheetに同様のデータを用意しました(sample1-read-excel)。そこからExcel形式でダウンロードしてください。地域シートのデータにところどころブランクがあるのはどのように読み込まれるのかを見るためです。
Excelの内容をみてみます。
- 「地域」と「顧客」というシートがありヘッダは2行目(1番目)になってる
- id列をインデックスとして読み込む
- シートは別々に読み込むのではなく一緒に読み込む
以上を考慮すると以下のようになります。
import pandas as pd
data_frame_dict=pd.read_excel('sample1-read-excel.xlsx',index_col='id',header=1,sheet_name=['地域','顧客'])
print(data_frame_dict)
実行結果
{'地域': 調査年月日 地域コード 地域 地域人口
id
C0101-2015 2015-10-31 C0101 北海道 5381733.0
C0102-2015 2015-10-31 C0102 東北 8982807.0
C0103-2015 NaT C0103 関東 45928765.0
C0104-2015 2015-10-31 C0104 北陸 5311340.0
C0105-2015 2015-10-31 C0105 東海 15031201.0
C0106-2015 2015-10-31 NaN 近畿 20725433.0
C0107-2015 2015-10-31 C0107 中国 7438037.0
C0108-2015 2015-10-31 C0108 四国 NaN
C0109-2015 2015-10-31 C0109 NaN 13016329.0
C0110-2015 2015-10-31 C0110 沖縄 1433566.0, '顧客': 顧客数
id
C0101-2015 100
C0102-2015 100
C0103-2015 1000
C0104-2015 100
C0105-2015 300
C0106-2015 500
C0107-2015 50
C0108-2015 20
C0109-2015 0
C0110-2015 0}
以上のようにシート名である'地域'と'顧客'をキーとしたディクショナリとしてExcelからデータを取得できました。日付・時刻のデータがブランクのところにはNaTが、数字や文字がブランクのところにはNaNが入ります。日付データについても日時として取得できているようです。
↑目次
まとめ
今回はpandasのread_excelメソッドについてのべました。read_excelには他にも多数のオプション引数があります。詳しく知りたい人は、公式サイトのpandas.read_excelをみてみてください。
↑目次
Comment on this article
コメントはまだありません。
Send comments