Home > 記事 > Python > pandas > 【Python】Excelの読み込み | read_excel

記事

【Python】Excelの読み込み | read_excel

普段、表形式のデータを編集したり加工する時、何を使っているでしょうか。人によってはAccessやSQLiteという人もいるかもしれませんが、大部分の人(SEは除く)はExcelなどの表計算ソフトを使っているとおもいます。標準的なIT知識を持ったサラリーマンが何かを一覧化したりリスト化するのに表計算ソフトは必須と言ってよいでしょう。

仕様書でも一覧系はExcelを使うことがよくあります。そのようなExcelからデータを読み取って加工したり表示したいというニーズは非常に多くあります。今回はそのような時に訳にたつ、pandasのread_excelメソッドについてのべます。

目次

  1. 事前準備
  2. read_exceメソッドの説明
    1. ヘッダを指定する header
    2. 行名(index)のカラムを指定する index_col
    3. シート名の指定 sheet_name
    4. 複数シートを同時に読み込む場合
  3. read_excelメソッドの呼び出しサンプル
  4. まとめ

事前準備

パッケージをインストールしておきます。

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)

上記コードの緑色の部分は実際に読み込むファイル名に書き換えてください。

↑目次

ヘッダを指定する header

ヘッダを指定始まる行数が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

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  Please enter the letters of the image