Pythonで特定シートだけ読み込む入門 — pandas.read_excel(sheet_name=’Sheet1′)
Excelブックの「このシートだけ!」を確実に読み込む方法を、初心者向けにやさしく解説します。すぐに動くコード、帳票向けテンプレート、練習問題までまとめました。
基本の使い方
import pandas as pd
# "sample.xlsx" の "Sheet1" だけ読み込む
df = pd.read_excel("sample.xlsx", sheet_name="Sheet1")
print(df.head()) # 先頭5行で中身確認
print(df.info()) # 列名・型の確認
Python- ポイント:
sheet_nameに読みたいシート名(または番号)を指定します。番号は 0 が先頭シートです。 - 注意: シート名は完全一致が必要です。末尾の空白や全角半角の違いに気をつけましょう。
よく使う引数と組み合わせ
import pandas as pd
df = pd.read_excel(
"report.xlsx",
sheet_name="明細", # 読むシート名
usecols=["日付", "商品名", "金額(円)"], # 欲しい列だけ
skiprows=5, # 先頭の説明行をスキップ
header=0, # スキップ後の行をヘッダーとして使う
dtype={"商品コード": "string"}, # 型を固定(先頭ゼロ保持など)
parse_dates=["日付"], # 日付列をdatetimeに
na_values=["-", "不明"] # 特定文字を欠損扱いに
)
print(df.head())
Python- シート指定の別形:
# 先頭シートを番号で指定 df = pd.read_excel("report.xlsx", sheet_name=0) - 列範囲の指定:
# A〜F列をまとめて読み込み df = pd.read_excel("report.xlsx", sheet_name="明細", usecols="A:F")
実践テンプレート
帳票のタイトルや注記を飛ばして、見出し行から読む
import pandas as pd
df = pd.read_excel(
"monthly.xlsx",
sheet_name="集計",
skiprows=6, # 7行目からが表
header=0,
usecols="B:G" # 欲しい範囲だけ
)
# 軽い整形
df = df.rename(columns=lambda c: str(c).strip())
for col in df.select_dtypes(include="object"):
df[col] = df[col].str.strip()
print(df.head())
Pythonコード類の先頭ゼロを守りつつ、数値列は数値に
import pandas as pd
df = pd.read_excel(
"orders.xlsx",
sheet_name="明細",
dtype={"注文番号": "string", "顧客ID": "string"},
parse_dates=["注文日"],
usecols=["注文番号", "顧客ID", "注文日", "数量", "金額"]
)
df["数量"] = pd.to_numeric(df["数量"], errors="coerce")
df["金額"] = pd.to_numeric(df["金額"], errors="coerce")
print(df.info())
Pythonシート名をタグとして列に残す(後で識別に使う)
import pandas as pd
name = "2025_Q2"
df = pd.read_excel("sales.xlsx", sheet_name=name, usecols=["Date", "Product", "Revenue"], parse_dates=["Date"])
df["sheet"] = name
print(df.head())
Pythonつまずきやすいポイントと回避策
- シート名の誤記:
対策: まずシート名を列挙して確認。
import pandas as pd
xls = pd.ExcelFile("file.xlsx")
print(xls.sheet_names) # ['Sheet1', '明細', '集計'] など
Python- 先頭ゼロが消える(郵便番号・コード):
対策:dtype={"列名": "string"}を指定して文字列固定。 - 日付が文字列のまま・混在:
対策:parse_dates=["日付"]または後処理でpd.to_datetime(..., errors="coerce")。 - 不要な説明行・空白列が混ざる:
対策:skiprowsとusecolsで読み込み段階から削る。 - 拡張子に合うエンジンがない:
対策:.xlsxはpip install openpyxl、古い.xlsはpip install xlrd。
ミニ例題(手を動かして慣れる)
例題1:特定シートの必要列だけ読み込んで先頭10行表示
- 課題:
sales.xlsxの2025_Q3シートから「Date, Product, Revenue」を読み、先頭10行を表示。
import pandas as pd
df = pd.read_excel("sales.xlsx", sheet_name="2025_Q3", usecols=["Date", "Product", "Revenue"])
print(df.head(10))
Python例題2:説明行スキップ+列名を自分で付ける
- 課題:
report.xlsxの明細シートは先頭4行が説明。5行目からデータで、列名を["date","item","qty","price"]にしたい。
import pandas as pd
df = pd.read_excel("report.xlsx", sheet_name="明細", skiprows=4, header=None, names=["date","item","qty","price"])
print(df.info())
Python例題3:文字列コード保持+月別合計を集計
- 課題:
orders.xlsxの集計シートからOrderIDを文字列、OrderDateを日付、Amountを数値にして月別合計を計算。
import pandas as pd
df = pd.read_excel(
"orders.xlsx",
sheet_name="集計",
dtype={"OrderID": "string"},
parse_dates=["OrderDate"],
usecols=["OrderID", "OrderDate", "Amount"]
)
df["Amount"] = pd.to_numeric(df["Amount"], errors="coerce")
monthly = (
df.assign(month=df["OrderDate"].dt.to_period("M"))
.groupby("month", as_index=False)["Amount"].sum()
)
print(monthly)
Python