PythonでExcelの先頭行をスキップする入門 — skiprows=range(n)
Excel帳票には「タイトル」「会社ロゴ」「注意書き」など、データの前に余分な行が入っていることがよくあります。そんなときに便利なのが skiprows。初心者向けに、コード例とテンプレートを交えて解説します。
基本の使い方
import pandas as pd
# 先頭3行をスキップして読み込む
df = pd.read_excel("report.xlsx", skiprows=3)
print(df.head())
Python- ポイント:
skiprows=3→ 0,1,2行目を飛ばして、4行目から読み込みます。skiprows=range(n)と書くと「0〜n-1行目」をまとめてスキップできます。
skiprows=range(n) の具体例
import pandas as pd
# 先頭5行を飛ばす(0〜4行目)
df = pd.read_excel("report.xlsx", skiprows=range(5))
print(df.head())
Python- イメージ:
Excelの1〜5行目がタイトルや説明 → 6行目からが本当のデータ、という帳票にぴったり。
よくあるパターン別テンプレート
1. タイトル行を飛ばして列名を使う
df = pd.read_excel("monthly.xlsx", skiprows=5, header=0)
Python- 先頭5行を飛ばし、6行目を列名として使う。
2. 列名がない場合は自分で付ける
df = pd.read_excel(
"no_header.xlsx",
skiprows=3,
header=None,
names=["date", "item", "qty", "price"]
)
Python- 先頭3行を飛ばし、4行目からデータ。列名は自分で指定。
3. 範囲指定+列選択を組み合わせる
df = pd.read_excel(
"report.xlsx",
skiprows=range(7), # 先頭7行を飛ばす
usecols="B:F", # B〜F列だけ読む
header=0
)
Python- 帳票の「表部分」だけをすっきり取り込める。
読み込み後の整形ワザ
- 列名の空白除去:
df = df.rename(columns=lambda c: str(c).strip())
Python- 数値変換:
df["qty"] = pd.to_numeric(df["qty"], errors="coerce")
df["price"] = pd.to_numeric(df["price"], errors="coerce")
Python- 日付変換:
df["date"] = pd.to_datetime(df["date"], errors="coerce")
Pythonつまずきやすいポイント
- skiprowsとheaderの組み合わせ:
skiprowsで飛ばした後の行が「列名行」になる。- 列名がない場合は
header=Noneとnames=[...]をセットで。
- 飛ばしすぎてデータが消える:
skiprows=range(n)の n を大きくしすぎると、必要な行まで飛ばしてしまう。- まずは小さめで試して、
head()で確認。
ミニ例題(練習用)
例題1:説明行を飛ばして列名を使う
- 課題:
sales.xlsxの先頭4行は説明。5行目から列名。
import pandas as pd
df = pd.read_excel("sales.xlsx", skiprows=4, header=0)
print(df.head())
Python例題2:列名なしデータで先頭行を飛ばす
- 課題:
report.xlsxの先頭2行は不要。3行目からデータ。列は「date, item, qty, price」。
import pandas as pd
df = pd.read_excel("report.xlsx", skiprows=2, header=None, names=["date","item","qty","price"])
print(df.info())
Python例題3:範囲指定でまとめて飛ばす
- 課題:
orders.xlsxの先頭10行はタイトルや注記。11行目からデータ。
import pandas as pd
df = pd.read_excel("orders.xlsx", skiprows=range(10), header=0)
print(df.head())
Pythonまとめ
- 先頭行を飛ばす →
skiprows - まとめて飛ばす →
skiprows=range(n) - 列名行を指定 →
header=0orheader=None+names=[...] - 不要な説明やタイトルを避けて、データ部分だけを読み込むのがコツ
