なぜ「特定シートだけ読む」を意識すべきか
Excelファイルは、1つのファイルの中に複数のシートを持てます。
でも、実務で「全部のシートを毎回読む」ことはほとんどありません。
欲しいのはたいてい「このシートだけ」「この集計用シートだけ」です。
pandas.read_excel の sheet_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.xlsx の Sheet1 だけを対象にしている」と、読む人にも自分にもはっきり伝わります。
シート名は 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には、シートの先頭にタイトルや注記が入っていることが多いです。
「どこからが表なのか」を skiprows と header で合わせます。
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行ずれて入ったりして、後で必ず苦しみます。
特定シートを読むときは、「そのシートのどこからが表か」を一度目で確認してから、skiprows と header を決める癖をつけてください。
型を整える(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シートだけ」を読むskiprowsとheaderで表の開始位置を合わせるusecolsとnamesで列を絞りつつ、名前を整えるparse_datesとdtypeで型を整える- 読み込み直後に、もう月次集計まで一気に行ける
という流れになっています。
「特定シートを読む」ときは、ここまで一気に整えてしまうのが理想形です。
テンプレ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相手のコードが一気にプロっぽくなります。
