さわやかに

Pythonのことだったり子供のことだったり

Python pandas Excelファイル 複数シートの読み込み

sample.xlsxにはSheet1とSheet2の2シートが存在し、この2つのシートからpandasのDataFrameデータとして読み込む

f:id:kinakobanana:20200910122802p:plain
sample.xlsxのSheet1
f:id:kinakobanana:20200910122855p:plain
sample.xlsxのSheet2

sheet_nameにシート名をリストで複数指定すると辞書型で格納される
dfには辞書型なので、df['Sheet1']と出力する

import pandas as pd
df = pd.read_excel('sample.xlsx', sheet_name=['Sheet1', 'Sheet2'])
df['Sheet1']

デフォルトでは1行目をヘッダー、2行目以降をデータとして読み込んでいくので、
今回のsample.xlsxのSheet1は3行目までの空白行を範囲外とする必要がある
f:id:kinakobanana:20200910230047p:plain

読み飛ばしたい行はskiprowsに指定すると範囲外になる

  • skiprows=3とすると1〜3行目を読み飛ばす
  • skiprows=[1, 3]とすると1行目と3行目を読み飛ばす

ヘッダーが2行分ある場合はheader=[0,1]と指定をする

import pandas as pd
df = pd.read_excel('sample.xlsx', sheet_name='Sheet1', skiprows=3, header=[0, 1])
df

f:id:kinakobanana:20200910232434p:plain
大丈夫そうです


Sheet1とSheet2でskiprowsやheaderの指定が異なるので2度こうなる・・・けど

df1 = pd.read_excel('sample.xlsx', sheet_name='Sheet1', skiprows=3, header=[0, 1])
df2 = pd.read_excel('sample.xlsx', sheet_name='Sheet2')

これでいいんか?
もう少しスマートな書き方はないのかなと調べたら、コチラ
www.google.com
こうなりました。

xls = pd.ExcelFile('sample.xlsx')
df1 = pd.read_excel(xls, sheet_name = 'Sheet1', skiprows = 3, header = [0,1])
df2 = pd.read_excel(xls, sheet_name = 'Sheet2')
df1
df2
f:id:kinakobanana:20200910233745p:plain
Sheet1から読み込んだdf1
f:id:kinakobanana:20200910233837p:plain
Sheet2から読み込んだdf2
終わりです