【Python】PandasでExcelファイルを読み込む方法と主要オプション解説(read_excel)

ビジネスの現場において、データは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_colDataFrameのインデックス(行ラベル)として使用する列を指定します。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に取り込むことが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次