ビジネスの現場において、データはCSVファイルだけでなくMicrosoft Excel形式(.xlsx)で管理されることが一般的です。Pandasの read_excel 関数を使用することで、Excelブック内の特定のシートや、必要な列だけを効率的にDataFrameとして取り込むことができます。
本記事では、read_excel 関数の基本的な使い方と、データの取り込み範囲を細かく制御するための主要なパラメータ(引数)について解説します。
目次
主要パラメータ一覧
read_excel には多くのオプションが存在しますが、特によく利用される4つのパラメータを以下の表にまとめました。
| パラメータ | 意味・役割 | 指定例 |
| sheet_name | 読み込むシートを指定します。シート名(文字列)またはインデックス(0始まりの整数)で指定可能です。リスト形式で複数を指定することもできます。 | "Sales_Data", 0, ["Sheet1", "Sheet2"] |
| header | ヘッダー(列名)として使用する行番号を指定します。デフォルトは 0(1行目)です。ヘッダーがない場合は None を指定します。 | 1 (2行目をヘッダーに), None |
| usecols | 読み込む「列」を限定します。Excelの列記号(”A:C”)や列名、列番号で指定可能です。 | "A:C", [0, 2], ["ID", "Name"] |
| index_col | DataFrameのインデックス(行ラベル)として使用する列を指定します。 | 0, "Date" |
実装サンプルコード
以下に、サンプル用のExcelファイルを生成し、それを様々なオプションで読み込む完全なPythonコードを示します。
※このコードを実行するには、Excel操作用ライブラリ openpyxl がインストールされている必要があります(pip install openpyxl)。
import pandas as pd
import os
def demonstrate_read_excel():
"""
Pandasを用いたExcelファイルの読み込みオプションを実演する関数
"""
# ---------------------------------------------------------
# 1. 準備: テスト用のExcelファイルを作成
# ---------------------------------------------------------
file_name = "monthly_sales_report.xlsx"
sheet1_name = "April_2026"
sheet2_name = "May_2026"
# シート1: 4月データ(1行目はタイトル等の余計な行と仮定)
# A列: ID, B列: Product, C列: Price, D列: Quantity
df_april = pd.DataFrame({
"Transaction_ID": [1001, 1002, 1003],
"Product_Name": ["Laptop", "Mouse", "Monitor"],
"Unit_Price": [1200, 50, 300],
"Sold_Quantity": [5, 20, 10]
})
# シート2: 5月データ(標準的な形式)
df_may = pd.DataFrame({
"Transaction_ID": [2001, 2002],
"Product_Name": ["Keyboard", "HDMI Cable"],
"Unit_Price": [80, 15],
"Sold_Quantity": [15, 30]
})
# Excelファイルとして保存
# シート1には意図的に空行を入れて、headerオプションのテスト用にする
with pd.ExcelWriter(file_name, engine="openpyxl") as writer:
# Aprilシート: 1行目にレポートタイトルを入れ、データは2行目(index=1)から開始させる
df_april.to_excel(writer, sheet_name=sheet1_name, index=False, startrow=1)
# Mayシート: 通常通り配置
df_may.to_excel(writer, sheet_name=sheet2_name, index=False)
print(f"--- 準備完了: {file_name} を作成しました ---\n")
# ---------------------------------------------------------
# 2. 基本的な読み込み
# ---------------------------------------------------------
print("=== 1. 基本的な読み込み (sheet_name指定) ===")
# sheet_nameでシート名を指定
# デフォルトでは1シート目しか読み込まないため、明示的に指定します
df_basic = pd.read_excel(file_name, sheet_name=sheet2_name)
print(f"シート '{sheet2_name}' の内容:")
print(df_basic)
print("\n")
# ---------------------------------------------------------
# 3. 複数シートの同時読み込み
# ---------------------------------------------------------
print("=== 2. 複数シートの読み込み ===")
# sheet_nameにリストを渡すと、{シート名: DataFrame} の辞書が返されます
sheets_dict = pd.read_excel(file_name, sheet_name=[sheet1_name, sheet2_name], header=1)
print("読み込まれたシートのキー:", sheets_dict.keys())
print(f"シート '{sheet1_name}' の先頭行:")
print(sheets_dict[sheet1_name].head(2))
print("\n")
# ---------------------------------------------------------
# 4. ヘッダー位置の指定 (header)
# ---------------------------------------------------------
print("=== 3. ヘッダー位置の指定 (header=1) ===")
# 作成時に1行目を空けた(startrow=1)ため、header=1を指定して2行目をヘッダーとして読み込む
df_header = pd.read_excel(file_name, sheet_name=sheet1_name, header=1)
print(df_header.head(2))
print("\n")
# ---------------------------------------------------------
# 5. 特定の列のみ読み込む (usecols)
# ---------------------------------------------------------
print("=== 4. 特定の列のみ読み込む (usecols) ===")
# パターンA: Excelの列記号で範囲指定 ("A:C")
# A列からC列までを取得
df_cols_range = pd.read_excel(
file_name,
sheet_name=sheet2_name,
usecols="A:C"
)
print("--- usecols='A:C' ---")
print(df_cols_range)
# パターンB: 列名のリストで指定
# 名前で指定するのが最も堅牢な方法です
df_cols_list = pd.read_excel(
file_name,
sheet_name=sheet2_name,
usecols=["Product_Name", "Sold_Quantity"]
)
print("\n--- usecols=['Product_Name', 'Sold_Quantity'] ---")
print(df_cols_list)
# パターンC: 列番号(インデックス)で指定
# 0番目(A列)と2番目(C列)を取得
df_cols_idx = pd.read_excel(
file_name,
sheet_name=sheet2_name,
usecols=[0, 2]
)
print("\n--- usecols=[0, 2] ---")
print(df_cols_idx)
# (参考) ファイル削除
# os.remove(file_name)
if __name__ == "__main__":
demonstrate_read_excel()
実行結果
--- 準備完了: monthly_sales_report.xlsx を作成しました ---
=== 1. 基本的な読み込み (sheet_name指定) ===
シート 'May_2026' の内容:
Transaction_ID Product_Name Unit_Price Sold_Quantity
0 2001 Keyboard 80 15
1 2002 HDMI Cable 15 30
=== 2. 複数シートの読み込み ===
読み込まれたシートのキー: dict_keys(['April_2026', 'May_2026'])
シート 'April_2026' の先頭行:
Transaction_ID Product_Name Unit_Price Sold_Quantity
0 1001 Laptop 1200 5
1 1002 Mouse 50 20
=== 3. ヘッダー位置の指定 (header=1) ===
Transaction_ID Product_Name Unit_Price Sold_Quantity
0 1001 Laptop 1200 5
1 1002 Mouse 50 20
=== 4. 特定の列のみ読み込む (usecols) ===
--- usecols='A:C' ---
Transaction_ID Product_Name Unit_Price
0 2001 Keyboard 80
1 2002 HDMI Cable 15
--- usecols=['Product_Name', 'Sold_Quantity'] ---
Product_Name Sold_Quantity
0 Keyboard 15
1 HDMI Cable 30
--- usecols=[0, 2] ---
Transaction_ID Unit_Price
0 2001 80
1 2002 15
各オプションの詳細解説
usecolsの指定方法について
usecols は非常に柔軟な指定が可能です。
- 文字列による範囲指定: Excelユーザーに馴染み深い
"A:D"や"A,C,E"といった形式が使えます。 - リストによる列名指定:
["Item", "Price"]のように列名を明記することで、列の順序が変わってもコードが壊れにくくなります。 - 整数リスト:
[0, 1]のように列番号(0始まり)で指定します。
headerの調整
Excelファイルの上部にタイトルや説明書きが含まれている場合、データが開始される行はずれます。その場合、header=2(3行目がヘッダー)のように適切な行番号を指定することで、正しい構造でDataFrameを作成できます。
これらのオプションを組み合わせることで、加工前のExcelデータを前処理なしで直接Pythonに取り込むことが可能になります。
