Python Excel操作 逆引き集 | 読み込み時に列名がない場合の処理

Python
スポンサーリンク

Pythonで「列名がないExcel」を読み込む入門 — header=None

Excelファイルによっては「列名(ヘッダー行)」がなく、いきなりデータが始まることがあります。その場合に便利なのが header=None。初心者向けに、コード例とテンプレートを交えて解説します。


基本の使い方

import pandas as pd

# 列名がないExcelを読み込む
df = pd.read_excel("no_header.xlsx", header=None)

print(df.head())
Python
  • ポイント:
    • header=None を指定すると、pandas は「列名がない」と判断し、0,1,2,… の番号を自動で列名にします。
    • そのままでは扱いにくいので、後で自分で列名を付けるのが一般的です。

列名を自分で付ける — names 引数

import pandas as pd

df = pd.read_excel(
    "no_header.xlsx",
    header=None,
    names=["Date", "Item", "Qty", "Price"]
)

print(df.head())
Python
  • ポイント:
    • names にリストを渡すと、そのまま列名になります。
    • 列数と同じ数の名前を用意する必要があります。

よくあるパターン別テンプレート

1. 列名なし → 自分で付ける

df = pd.read_excel("data.xlsx", header=None, names=["日付", "商品", "数量", "金額"])
Python

2. 先頭に説明行がある → スキップして列名を付ける

df = pd.read_excel(
    "report.xlsx",
    header=None,
    skiprows=5,  # 6行目からデータ
    names=["date", "item", "qty", "price"]
)
Python

3. 列数が多い → 自動で「col1, col2, …」と付ける

df = pd.read_excel("bigdata.xlsx", header=None)
df.columns = [f"col{i+1}" for i in range(df.shape[1])]
Python

読み込み後の整形ワザ

  • 空白除去:
df = df.applymap(lambda x: str(x).strip() if isinstance(x, str) else x)
Python
  • 型変換:
df["数量"] = pd.to_numeric(df["数量"], errors="coerce")
df["金額"] = pd.to_numeric(df["金額"], errors="coerce")
Python
  • 日付変換:
df["日付"] = pd.to_datetime(df["日付"], errors="coerce")
Python

つまずきやすいポイント

  • 列数と names の数が合わない → エラー
    → 列数を確認してから名前を付ける。
  • 先頭ゼロが消える(郵便番号やコード)
    dtype={"郵便番号": "string"} を指定。
  • 日付が文字列のまま
    parse_datesheader=None では効かないことがあるので、後処理で pd.to_datetime を使う。

ミニ例題(練習用)

例題1:列名なしの売上データを読み込んで列名を付ける

  • 課題: sales.xlsx のシートには列名がなく、列は「日付, 商品, 数量, 金額」。列名を付けて先頭10行を表示。
import pandas as pd
df = pd.read_excel("sales.xlsx", header=None, names=["日付", "商品", "数量", "金額"])
print(df.head(10))
Python

例題2:説明行を飛ばして列名を付ける

  • 課題: report.xlsx の先頭3行は説明。4行目からデータ。列は「date, item, qty, price」。
import pandas as pd
df = pd.read_excel("report.xlsx", header=None, skiprows=3, names=["date", "item", "qty", "price"])
print(df.info())
Python

例題3:列名を自動生成して集計

  • 課題: orders.xlsx の列名なしデータを読み込み、列名を「col1, col2, …」にして、3列目の合計を出す。
import pandas as pd

df = pd.read_excel("orders.xlsx", header=None)
df.columns = [f"col{i+1}" for i in range(df.shape[1])]

print("3列目の合計:", df["col3"].sum())
Python

まとめ

  • 列名がない → header=None
  • 自分で列名を付けたい → names=[...]
  • 説明行を飛ばす → skiprows と組み合わせる
  • 列数が多い → 自動生成で col1, col2, …
タイトルとURLをコピーしました