【Python】pandasでエクセルをDataFrameとして読み込む方法

今回はpandasを使ってエクセルファイルの指定データをpandas DataFrameに変換し読み込む方法をまとめる。


基本的なエクセルファイルの読込み

まずは、エクセルファイルを取込むうえでの基本を確認します。

import pandas as pd

df = pd.read_excel('file path')

エクセルファイルをDataFrameに変換する場合の基本は以上のコードだけです。
ただし、このpandas.read_excel()は拡張子.xlsのエクセルファイルのみに対応しているため、このままでは.xlsxなどのファイルを扱うことができません。


拡張子.xlsxのエクセルファイルの読込み

拡張子が.xlsでない場合には、以下のように書くことでDataFrameに変換できます。

df = pd.read_excel('file path', engine='openpyxl')


ファイルの読込み範囲指定

ファイルのシートが複数あり、シートを指定して読み込みたい場合や
シートの最初の数行はタイトルや説明文がはいっているため、そこを飛ばして読み込みたい場合など、範囲を指定して読み込みたいことが多いかと思います。

それらの指定方法を一つ一つ確認していきます。

読込みシートの選択方法

読込むシートを選択する場合には、引数にsheet_name=’hoge’を渡して指定します。

何も指定しなかった場合のデフォルトは一番初めのシートが選択されます。

# シート名で指定する場合
pd.read_excel('hoge', sheet_name='Sheet Name')

# シート番号で指定
pd.read_excel('hoge', sheet_name=0) # 1番目のシートを読み込む
pd.read_excel('hoge', sheet_name=1) # 2番目のシートを読み込む

# 複数シートの指定
pd.read_excel('hoge', sheet_name=[0,1])
pd.read_excel('hoge', sheet_name=['Sheet1', 'Sheet2'])

番号でシートを指定する場合には0が1番目のシートになり、1が2番目のシートというように一つずれることに注意(pythonは0からなので当たり前といえば当たり前ですが)


ヘッダー行(開始行)の指定

DataFrameのヘッダーにする行を指定することで、指定した行よりも上にある行はDataFrameとしての読込みの対象からはずすことができる。

指定しなかった場合のデフォルトは1行目から読み込みとなる。

pd.read_excel('hoge', header=0) # 1行目から読み込み
pd.read_excel('hoge', header=1) # 2行目から読み込み

リストを渡すこともでき、リストを渡した場合にはmultiindexが作成される。


フッター行の指定

フッター行を指定することで、その下の行を読み込まない。
(0がデフォルトの基準であるため数え方には注意)

pd.read_excel('hoge', skipfooter=10) # 下の10行は読み込まない


読込み行数や列の指定

読込み行数の指定

pd.read_excel('hoge', nrows=5) # 6行目までを読み込む

上記例の場合、1行目がヘッダーになる。
その下がデータフレーム上の行になる。


読込み列の指定

使用する列を指定することもできる。
一列だけを読み込みたい場合もリストで渡す。

pd.read_excel('hoge', usecols=[0,2,4]) # 1,3,5列目を読み込む
pd.read_excel('hoge', usecols='A,D') # AとD(1,4)列を読み込む
pd.read_excel('hoge', usecols=range(0,5)) # 1~5列目までを読み込む


インデックス列の指定

index_colを使って指定する。デフォルトはNone。

pd.read_excel('hoge', index_col=0) # 1列目をインデックスにする


Web上のzip形式ファイルの読込み

Web上のエクセルファイルであれば、上記の方法でパスを指定する代わりにURLを指定することで読込むことができる。

しかし、zip形式に圧縮されたエクセルファイルは、URLを渡すだけでは取得できず、前処理が必要になる。

# pandasに加えて必要になるライブラリをインポートする
import requests, io, zipfile

r = requests.get('URL') # zipfileのURLを指定
r2 = zipfile.ZipFile(io.BytesIO(r.content))
r3 = r2.open(r2.namalist()[0], 'r').read()

df = pd.read_excel(io.BytesIO(r3), engine='openpyxl') # .xlsxファイルと仮定