Python Excel操作 逆引き集 | 特定シートだけ読み込む

Python Python
スポンサーリンク

なぜ「特定シートだけ読む」を意識すべきか

Excelファイルは、1つのファイルの中に複数のシートを持てます。
でも、実務で「全部のシートを毎回読む」ことはほとんどありません。
欲しいのはたいてい「このシートだけ」「この集計用シートだけ」です。

pandas.read_excelsheet_name 引数をきちんと指定すると、

  • 読み込みが速くなる
  • メモリ消費が減る
  • コードの意図がはっきりする

という、地味だけど効き目の大きいメリットが得られます。


基本形:特定シートを1つだけ読み込む

最小コードと動きのイメージ

import pandas as pd

df = pd.read_excel("sales.xlsx", sheet_name="Sheet1")

print(df.head())
print(df.info())
Python

ここで重要なのは、sheet_name="Sheet1" を明示していることです。
これにより、「このコードは sales.xlsxSheet1 だけを対象にしている」と、読む人にも自分にもはっきり伝わります。

シート名は Excel のタブに表示されている名前と一致させます。
sheet_name=0 のように番号で指定することもできますが、実務では「名前で指定する」ほうが安全です。
なぜなら、シートの順番は簡単に変わるからです。


シート名の指定方法をきちんと押さえる

文字列で指定するパターン(おすすめ)

df = pd.read_excel("sales.xlsx", sheet_name="2025_Q1")
Python

この書き方の良さは、「コードを見ただけで、どのシートを読んでいるか一目でわかる」ことです。
レビューする人にも、自分が数ヶ月後に見返したときにも、圧倒的に読みやすくなります。

インデックス番号で指定するパターン(0始まり)

df0 = pd.read_excel("sales.xlsx", sheet_name=0)  # 先頭シート
df1 = pd.read_excel("sales.xlsx", sheet_name=1)  # 2番目のシート
Python

これは「とりあえず中身を見たい」ときの簡易確認には便利です。
ただし、本番コードではあまりおすすめしません。シートの順番が変わると、別のシートを読んでしまうからです。


特定シートを読むときに一緒にやっておきたいこと

必要な列だけに絞る usecols

特定シートを読むときでも、「全部の列を読む必要があるか?」は別問題です。
usecols で列を絞ると、処理が軽くなり、DataFrameも見通しがよくなります。

import pandas as pd

df = pd.read_excel(
    "sales.xlsx",
    sheet_name="2025_Q1",
    usecols=["Date", "Product", "Revenue"]
)

print(df.head())
Python

列名で指定するのが一番わかりやすいですが、列記号(”A:C” など)で指定することもできます。
「この分析に本当に必要な列はどれか?」を最初に決めておくと、その後のコードがかなりスリムになります。

ヘッダー行と説明行をきちんと合わせる

現場のExcelには、シートの先頭にタイトルや注記が入っていることが多いです。
「どこからが表なのか」を skiprowsheader で合わせます。

import pandas as pd

df = pd.read_excel(
    "report.xlsx",
    sheet_name="明細",
    skiprows=4,   # 5行目からが表
    header=0      # その行を列名として使う
)

print(df.head())
print(df.columns)
Python

ここがズレると、列名がデータになったり、データが1行ずれて入ったりして、後で必ず苦しみます。
特定シートを読むときは、「そのシートのどこからが表か」を一度目で確認してから、skiprowsheader を決める癖をつけてください。

型を整える(dtype と parse_dates)

特定シートを読むときこそ、「このシートの列はどういう型で扱いたいか」を意識するチャンスです。

import pandas as pd

df = pd.read_excel(
    "sales.xlsx",
    sheet_name="2025_Q1",
    usecols=["Date", "Product", "Qty", "Amount"],
    parse_dates=["Date"],
    dtype={
        "Product": "string",  # コードやIDは文字列
        "Qty": "Int64"        # 欠損を許容する整数
    }
)

print(df.dtypes)
Python

日付は parse_dates で datetime にしておくと、月次集計や期間抽出が一気に楽になります。
コードやIDは "string" にしておくと、先頭ゼロが消えません。
「特定シートを読む」=「そのシートのデータ仕様をちゃんと決める」と考えると、設計がうまくいきます。


実践テンプレートでイメージを固める

テンプレ1:売上シートを読み込んで月次合計を出す

import pandas as pd

df = pd.read_excel(
    "sales.xlsx",
    sheet_name="2025",
    skiprows=4,
    header=0,
    usecols=["日付", "商品コード", "金額"],
    names=["date", "code", "amount"],   # 列名を英語に統一
    parse_dates=["date"],
    dtype={"code": "string"}
)

df["amount"] = pd.to_numeric(df["amount"], errors="coerce")

monthly = (
    df.assign(month=df["date"].dt.to_period("M"))
      .groupby("month", as_index=False)["amount"].sum()
)

print(monthly)
Python

ここでやっていることを整理すると、

  • sheet_name="2025" で「2025シートだけ」を読む
  • skiprowsheader で表の開始位置を合わせる
  • usecolsnames で列を絞りつつ、名前を整える
  • parse_datesdtype で型を整える
  • 読み込み直後に、もう月次集計まで一気に行ける

という流れになっています。
「特定シートを読む」ときは、ここまで一気に整えてしまうのが理想形です。

テンプレ2:明細シートだけ読み込んで顧客別集計をする

import pandas as pd

df = pd.read_excel(
    "orders.xlsx",
    sheet_name="明細",
    usecols=["顧客ID", "顧客名", "金額"],
    names=["customer_id", "customer_name", "amount"],
    header=0,
    dtype={"customer_id": "string"},
    converters={"amount": lambda x: float(str(x).replace(",", "")) if pd.notna(x) else None}
)

summary = (
    df.groupby(["customer_id", "customer_name"], as_index=False)["amount"]
      .sum()
      .sort_values("amount", ascending=False)
)

print(summary.head())
Python

ここでは、

  • シート名で「明細」シートだけを読む
  • 列名を英語に統一して、後のコードを読みやすくする
  • 金額列を読み込み時に数値化してしまう

という工夫をしています。
「このシートはこういう用途で使う」という意図を、sheet_name と引数の組み合わせで表現しているイメージです。


小さな練習問題

練習1:sales.xlsx の Q1 シートだけを読み、Date と Amount だけで月次合計を出す

条件は次の通りです。

  • sheet_name="Q1" を使う
  • usecols=["Date", "Amount"] で列を絞る
  • parse_dates=["Date"] で日付を datetime にする
  • Amount を数値化して、月ごとの合計を出す

自分で書いてみて、「どこでエラーになったか」「どこがわかりにくかったか」を意識してみてください。

練習2:report.xlsx の Summary シートだけを読み、Region ごとの売上合計を出す

次の条件でコードを書いてみてください。

  • sheet_name="Summary" を使う
  • usecols=["Region", "Revenue"] を指定する
  • Revenue を数値化する(カンマ付きでもOKにする)
  • 地域ごとの合計を出して、降順に並べる

ここまでできると、「特定シートだけを狙って読み、そのシートの中で完結した集計をする」という流れがかなり身についてきます。


最後に

sheet_name='Sheet1' は、ただのオプションではなく、「このコードはどのシートを前提にしているか」を宣言するための大事なスイッチです。
特定シートを読むときは、

  • シート名を文字列で明示する
  • そのシートの構造(開始行・列名・型)を一度ちゃんと確認する
  • 読み込み時に、できるだけ最終形に近い形まで整える

この3つを意識すると、Excel相手のコードが一気にプロっぽくなります。

タイトルとURLをコピーしました