閉じる

PandasでExcelファイルを効率的に読み込む方法:read_excelの使い方と最新エンジン比較を解説

Pythonを活用したデータ分析や業務効率化において、Excelファイルの操作は避けて通れないタスクです。

その中でも、Pandasライブラリのread_excel関数は、ExcelデータをDataFrame形式へ瞬時に変換できる非常に強力なツールです。

2026年現在、Pandasはさらに進化を遂げており、かつて課題であった読み込み速度の大幅な改善や、多様なExcel形式への対応がさらに進んでいます。

本記事では、基本的な使い方から、最新の高速エンジンを用いたパフォーマンス向上術、実務で役立つ応用テクニックまでを詳しく解説します。

PandasによるExcel読み込みの基本

PandasでExcelファイルを読み込むための中心となるのがpd.read_excel()です。

この関数を使用することで、複雑な書式を持つExcelシートを、分析に適した行列形式のデータ構造(DataFrame)に変換できます。

事前準備とライブラリのインストール

Pandas自体にはExcelファイルを直接解析する機能は含まれておらず、内部で「エンジン」と呼ばれる外部ライブラリを使用します。

用途に合わせて以下のライブラリをインストールしておく必要があります。

Python
# Pandas本体と、標準的なExcelエンジン(openpyxl)、高速なCalamineエンジンをインストール
pip install pandas openpyxl python-calamine

2026年の開発環境では、標準的な.xlsxファイルを扱うためのopenpyxlに加えて、Rust製の高速エンジンであるpython-calamineの利用が推奨されるケースが増えています。

基本的な読み込みコード

最もシンプルな読み込み方法は、ファイルパスを指定するだけです。

Python
import pandas as pd

# Excelファイルを読み込む
df = pd.read_excel("sample_data.xlsx")

# データの先頭5行を表示
print(df.head())
実行結果
   ID   Name  Age         City
0   1  Alice   25        Tokyo
1   2    Bob   30        Osaka
2   3 Charlie   22       Nagoya
3   4  David   35     Fukuoka
4   5    Eve   28     Sapporo

デフォルトでは最初のワークシートが読み込まれます。

特定のシートを指定したい場合は、引数を使用します。

read_excelの主要パラメーター

実務のExcelデータは、必ずしも1行目がヘッダーであったり、全列が必要であったりするわけではありません。

read_excelには、複雑な表構造に対応するための豊富なパラメーターが用意されています。

シートの指定 (sheet_name)

特定のシート名やインデックス番号を指定できます。

また、Noneを指定すると、すべてのシートを辞書形式で読み込むことが可能です。

Python
# シート名を指定して読み込む
df_sales = pd.read_excel("data.xlsx", sheet_name="Sales_2025")

# インデックス(0から開始)で指定する
df_first = pd.read_excel("data.xlsx", sheet_name=0)

# すべてのシートを読み込む(戻り値は {シート名: DataFrame} の辞書)
all_sheets = pd.read_excel("data.xlsx", sheet_name=None)
print(all_sheets.keys())

範囲の指定 (header, index_col, usecols)

Excelの表が途中の行から始まっている場合や、特定の列だけを抽出したい場合に便利です。

  • header: ヘッダーとして使用する行番号(0始まり)を指定します。
  • index_col: インデックス(行ラベル)として使用する列を指定します。
  • usecols: 読み込む列を制限します。列名リストや「”A:C”」のようなExcel形式の範囲指定も可能です。
Python
# 3行目(インデックス2)をヘッダーとし、A列からC列までを読み込む
df_custom = pd.read_excel(
    "report.xlsx",
    header=2,
    usecols="A:C",
    index_col=0
)

データ型と欠損値の制御 (dtype, na_values)

数値を文字列として読み込みたい場合や、特定の値を欠損値(NaN)として扱いたい場合に使用します。

特に「商品コード」などの先頭の0(ゼロ落ち)を防ぎたいときはdtypeの指定が必須です。

Python
# IDを文字列として、特定の文字列を欠損値として読み込む
df_typed = pd.read_excel(
    "master_data.xlsx",
    dtype={"ID": str},
    na_values=["未入力", "---"]
)

最新エンジン比較:処理速度と互換性

PandasのExcel読み込み速度は、使用する「エンジン」に大きく依存します。

2026年現在、主に利用される4つのエンジンを比較します。

エンジン名対応形式特徴推奨シーン
openpyxl.xlsx, .xlsm現在の標準エンジン。多機能だが、大容量データの読み込みはやや遅い。一般的な利用、マクロを含むファイルの読み込み
calamine.xlsx, .xlsb, .xls最新の高速エンジン。Rust製ライブラリを活用し、圧倒的な読み込み速度を誇る。大容量ファイル、速度を最優先するバッチ処理
pyxlsb.xlsbExcelバイナリ形式に特化。大容量のバイナリブックを扱う際に必要。巨大なバイナリ形式のデータ解析
xlrd.xls旧形式(Excel 97-2003)専用。セキュリティ上の理由から.xlsxは非対応。レガシーなシステムのデータ移行

Calamineエンジンの活用

最新の環境で最も注目されているのがCalamineエンジンです。

数万行を超えるExcelデータの場合、従来のopenpyxlと比較して数倍から十数倍の高速化が期待できます。

Python
# Calamineエンジンを指定して高速読み込み
# 事前に pip install python-calamine が必要
df_fast = pd.read_excel("huge_data.xlsx", engine="calamine")

大規模なデータセットを扱うプロジェクトでは、デフォルトのエンジンに頼らず、明示的にengine="calamine"を指定することが、2026年におけるベストプラクティスとなっています。

実務で役立つ応用テクニック

複数ファイルの一括読み込み

フォルダ内にある複数のExcelファイルを結合して一つのDataFrameにする作業は、自動化の定番です。

Python
import glob
import pandas as pd

# 特定のパターンに一致するファイルリストを取得
files = glob.glob("sales_data/*.xlsx")

# 全ファイルを読み込んでリストに格納
df_list = [pd.read_excel(f) for f in files]

# 縦方向に結合
df_total = pd.concat(df_list, ignore_index=True)
print(f"合計行数: {len(df_total)}")

特定の行をスキップする (skiprows)

表の上にタイトルや注釈行がある場合、skiprowsを使って必要なデータ部分まで読み飛ばすことができます。

Python
# 最初の5行をスキップして読み込む
df_clean = pd.read_excel("dirty_data.xlsx", skiprows=5)

メモリ消費の最適化

非常に大きなファイルを読み込む際、メモリ不足(MemoryError)が発生することがあります。

その場合は、必要な列だけをusecolsで絞り込み、さらにdtypeでメモリ効率の良い型(float64をfloat32にするなど)を指定します。

Python
# メモリを節約した読み込み例
df_optimized = pd.read_excel(
    "large_dataset.xlsx",
    usecols=["Date", "Amount", "Status"],
    dtype={"Amount": "float32", "Status": "category"}
)

category型は、重複の多い文字列データに対して極めて有効なメモリ節約術です。

トラブルシューティング:よくあるエラーと解決策

ImportError: Missing optional dependency ‘openpyxl’

このエラーは、Excelを解析するためのエンジンがインストールされていない場合に発生します。

解決策: pip install openpyxl を実行してください。

日付が数値として読み込まれる

Excel内部では日付は1900年1月1日からの経過日数(シリアル値)で管理されているため、時折ただの数値として読み込まれることがあります。

解決策: parse\_dates 引数を使用するか、読み込み後に pd.to\_datetime() で変換します。

Python
# 読み込み時に日付列を指定
df = pd.read_excel("data.xlsx", parse_dates=["受注日"])

パスワード保護されたファイル

Pandasのread_excel自体は直接パスワード解除をサポートしていません。

解決策: msoffcrypto-tool ライブラリを併用して、一度バイナリストリームとして解読してから読み込む必要があります。

まとめ

Pandasのread_excel関数は、単にファイルを読み込むだけでなく、読み込み段階でデータのクリーニングやフィルタリングを行うための高度な機能を備えています。

2026年のデータ分析現場では、データの肥大化に伴い、Calamineエンジンのような高速な選択肢を適切に選ぶスキルがより重要視されています。

本記事で紹介したパラメーターやエンジンの使い分けをマスターすることで、Excelデータの取り込みにおける「遅い」「エラーが出る」「型が崩れる」といったストレスから解放され、より本質的なデータ分析業務に集中できるようになるはずです。

まずは身近なExcelファイルで、usecolsengineの指定による変化を体感してみてください。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!