Python Excelファイル「.xlsx」をシート指定で読み込む「pandas × openpyxl × xlrd」

'22/05/01更新:シート名の一覧を取得する方法を追記しました。
 本記事では、下図のようなExcelファイル「.xlsx」をpandasで読み込む雛形コードを載せました。

 pandasでエクセルファイル(拡張子「.xlsx」)を読むためには、openpyxlとxlrdをインストールする必要があります。入れないと、XLRDError: Excel xlsx file; not supported というエラーが生じます

■インストール方法

pip install openpyxl
pip install xlrd

 

▼シート名を指定してpandasで読み込む方法

 シート名がわかってる場合、openpyxlのインポートの明示は不要です。但し、engine = "openpyxl" を指定します。

import pandas as pd

file_path = 'data.xlsx'

# pandasデータフレームで読み込む
df = pd.read_excel(file_path, sheet_name = 'Sheet1', # シート名 #index_col = 0, # インデックスにする列名 #header = None # ヘッダーにする行がない場合 #usecols = [0, 1, 3], # 読み込む列番号 #skiprows = [1], # スキップする行 engine = "openpyxl" ) print(df)

下図はその結果で、pandasデータフレームで読み込めます。

▼複数のシートを一括で読み込む方法

まず、シート名の一覧を取得する方法については、次のように openpyxlのインポートが必要です。

import openpyxl
import pandas as pd

file_path = 'data.xlsx'

# ブックをオブジェクトで取得
book = openpyxl.load_workbook(file_path)

# シート名一覧をリストで取得 
sheet_list = book.sheetnames
print(sheet_list)

すると、下記のように、シート名の一覧をリストで取得できます。

 そして、pd.read_excelで読み込み時に、引数「sheet_name」に複数シート名のリストで与えると、keyをシート名とした辞書型のデータフレームを取得します。

# シートを複数読み込む。keyがシート名の辞書型になる
df_dict = pd.read_excel(file_path,
                   sheet_name = sheet_list, # リストでも与えられる 
                   #index_col = 0, # インデックスにする列名
                   #header = None # ヘッダーにする行がない場合
                   #usecols = [0, 1, 3], # 読み込む列番号 
                   #skiprows = [1], # スキップする行
                   engine = "openpyxl"
)
print(df_dict)

下図はその結果です。

以上

<広告>