PythonでExcelを操る!主要ライブラリ徹底比較:openpyxl, xlrd, xlwt, pandas


PythonでExcelファイルを扱う機会は非常に多く、データ処理の自動化において欠かせないスキルです。しかし、いざExcelファイルを操作しようとすると、「どのライブラリを使えばいいんだろう?」と迷ってしまうかもしれません。Pythonには用途やExcelのバージョンに応じて、いくつかの主要なライブラリが存在します。

この記事では、Excelファイルを扱うPythonの主要ライブラリである**openpyxlxlrdxlwt、そしてpandas**を徹底的に比較し、それぞれの特徴、得意なこと、苦手なことを分かりやすく解説します。短いサンプルコードを交えながら、あなたのニーズに最適なライブラリ選びをサポートします。

なぜ複数のExcelライブラリがあるのか?

Excelファイルは、バージョンによって内部構造が異なります。

  • .xls形式: Excel 97-2003で使われた古いバイナリ形式。

  • .xlsx形式: Excel 2007以降で使われる新しいXMLベースの形式。

この違いに対応するため、Pythonにはそれぞれの形式に特化したライブラリや、より高レベルなデータ操作に特化したライブラリが存在するのです。

主要Excelライブラリの比較表

まずは、主要なライブラリの概要をまとめた比較表を見てみましょう。

ライブラリ名 主な用途 対応ファイル形式 特徴・得意なこと 苦手なこと
openpyxl 読み書き .xlsx .xlsxに特化、高機能(スタイル、グラフ、数式など)、新機能のサポート .xlsは非対応
xlrd 読み込み .xls (.xlsxも限定的に可) .xlsの読み込みに特化、シンプル 書き込みはできない、.xlsxは古いバージョンのみ対応
xlwt 書き込み .xls .xlsの新規作成・書き込みに特化、シンプル 読み込みはできない、.xlsxは非対応
pandas 読み書き .xlsx, .xls, .csvなど 高度なデータ分析・整形、CSVなど他形式との連携、大量データ処理 細かいセル操作やスタイル設定は直接的ではない

各ライブラリの詳細と使い分け

1. openpyxl: .xlsx形式のオールラウンダー

openpyxlは、現在最も推奨されるExcel操作ライブラリです。特に.xlsx形式のファイルを扱う場合にその真価を発揮します。

特徴

  • 読み書き両方に対応: .xlsxファイルの読み込みも書き込みも可能です。

  • 豊富な機能: セルの値の操作はもちろん、フォント、色、罫線などのスタイル設定、数式の読み書き、条件付き書式、グラフや画像の挿入まで、Excelの様々な機能をプログラムから制御できます。

  • 直感的なAPI: Excelのセル番地(例: ws['A1'])を使って操作できるため、非常に分かりやすいです。

どんな時に使う?

  • Excel 2007以降の.xlsxファイルをメインで扱う場合。

  • 既存のExcelファイルのデータを読み込んで処理し、新しいExcelファイルとして書き出したい場合。

  • Excelファイルに細かい書式設定や数式、グラフなどを自動で追加したい場合。

  • 最もモダンで機能豊富なソリューションを求める場合。

短いサンプルコード(読み書き)

Python
 
import openpyxl

# Excelファイルの作成と書き込み (.xlsx)
wb_write = openpyxl.Workbook()
ws_write = wb_write.active
ws_write['A1'] = "Hello"
ws_write['B1'] = "World!"
wb_write.save("my_excel.xlsx")
print("my_excel.xlsx を作成しました。")

# Excelファイルの読み込み (.xlsx)
wb_read = openpyxl.load_workbook("my_excel.xlsx")
ws_read = wb_read.active
print(f"A1の値: {ws_read['A1'].value}")
# 出力例: A1の値: Hello

2. xlrd: .xls形式の読み込み専門家

xlrdは、主にExcel 97-2003の.xls形式ファイルを読み込むために設計されたライブラリです。

特徴

  • 読み込みに特化: .xlsファイルのデータを効率的に読み込めます。

  • シンプル: APIが比較的シンプルで、簡単にデータを抽出できます。

どんな時に使う?

  • 主に古い.xls形式のExcelファイルからデータを読み込みたい場合。

  • 非常に古いシステムから出力されるExcelファイルを処理する必要がある場合。

苦手なこと

  • .xlsxファイルの新しい機能(例: 条件付き書式、Sparklinesなど)には対応していません。

  • 書き込みはできません.xls形式で書き込む場合はxlwtと組み合わせて使う必要があります。

  • xlrdのバージョン2.0.0以降は、デフォルトで.xlsxファイルのサポートが削除されています。.xlsxを読み込むには、追加のインストールが必要になるか、より新しいライブラリの使用が推奨されます。

短いサンプルコード(読み込み)

Python
 
import xlrd
import xlwt # テスト用にxlsファイルを作成するため

# テスト用のxlsファイルを作成
wb_temp = xlwt.Workbook(encoding="utf-8")
ws_temp = wb_temp.add_sheet("Sheet1")
ws_temp.write(0, 0, "Hello XLS")
wb_temp.save("my_old_excel.xls")
print("my_old_excel.xls を作成しました。")

# Excelファイルの読み込み (.xls)
book = xlrd.open_workbook("my_old_excel.xls")
sheet = book.sheet_by_index(0)
print(f"A1の値: {sheet.cell_value(0, 0)}")
# 出力例: A1の値: Hello XLS

3. xlwt: .xls形式の書き込み専門家

xlwtは、xlrdの対となるライブラリで、新しいExcelファイル(.xls形式)を作成し、データを書き込むために使用されます。

特徴

  • 書き込みに特化: .xlsファイルの新規作成とデータ書き込みを効率的に行えます。

  • シンプル: xlrdと同様に、APIが分かりやすいです。

どんな時に使う?

  • .xls形式で新しいExcelファイルを作成し、データを書き出したい場合。

  • 既存のシステムやツールが.xls形式のファイルしか受け付けない場合。

苦手なこと

  • 読み込みはできません

  • .xlsx形式のファイルには対応していません。

短いサンプルコード(書き込み)

Python
 
import xlwt

# Excelファイルの作成と書き込み (.xls)
book = xlwt.Workbook(encoding="utf-8")
sheet = book.add_sheet("Report")
sheet.write(0, 0, "Data 1")
sheet.write(1, 0, "Data 2")
book.save("new_report.xls")
print("new_report.xls を作成しました。")

4. pandas: データ分析のための強力なツール

pandasは直接的なExcel操作ライブラリではありませんが、データ分析のワークフローにおいてExcelファイルの読み書きを非常に効率的に行えます。内部的にはopenpyxlxlrdを呼び出してExcel操作を実行します。

特徴

  • データフレーム中心: ExcelデータをDataFrameという表形式のオブジェクトとして扱い、強力なデータ操作機能(フィルタリング、集計、結合など)を提供します。

  • 複数のファイル形式に対応: Excel (.xlsx, .xls) だけでなく、CSV、JSON、SQLデータベースなど、様々なデータ形式との間で相互にデータを変換・操作できます。

  • 高速: 大量のデータを扱う場合に非常に高速な処理が可能です。

どんな時に使う?

  • Excelファイルを読み込んだ後、複雑なデータ分析や変換を行いたい場合。

  • 分析結果をExcelファイルとして出力したい場合。

  • 他のデータ形式(CSVなど)とExcelデータを組み合わせて処理する場合。

  • Excelの細かいセル書式設定よりも、データの内容そのものの操作に重きを置く場合。

苦手なこと

  • セルの背景色や罫線、フォントサイズといった詳細なスタイル設定は直接的ではありませんopenpyxlを内部で利用して柔軟な書式設定も可能ですが、少し手間がかかります)。

  • Excelファイル内のグラフや図形を直接操作する機能はありません。

短いサンプルコード(読み書き)

Python
 
import pandas as pd

# データフレームの作成
data = {
    '商品': ['A', 'B', 'C'],
    '価格': [100, 200, 150],
    '数量': [10, 5, 8]
}
df = pd.DataFrame(data)

# データフレームをExcelファイルに書き込み (.xlsx)
df.to_excel("sales_data.xlsx", index=False) # index=FalseでPandasのインデックスを書き込まない
print("sales_data.xlsx を作成しました。")

# Excelファイルをデータフレームとして読み込み (.xlsx)
df_read = pd.read_excel("sales_data.xlsx")
print("\n読み込んだデータフレーム:\n", df_read)
# 出力例:
# 読み込んだデータフレーム:
#   商品  価格  数量
# 0    A  100   10
# 1    B  200    5
# 2    C  150    8

まとめ:最適なライブラリの選び方

PythonでExcelファイルを操作する際は、以下のポイントを考慮してライブラリを選びましょう。

  1. ファイル形式:

    • .xlsx形式を扱うなら: **openpyxl**が第一候補です。最も機能が豊富で、読み書き両方に対応しています。pandas.xlsxの読み書きが可能で、データ分析に最適です。

    • .xls形式を読み込むなら: **xlrd**が適しています。

    • .xls形式を書き込むなら: **xlwt**が適しています。

  2. 目的:

    • 簡単な読み書き、詳細な書式設定、グラフ操作など: openpyxl

    • データ分析、集計、他のデータ形式との連携: pandas(内部でopenpyxlxlrdを利用)。

    • 古い.xls形式の読み込みのみ: xlrd

    • 古い.xls形式の書き込みのみ: xlwt

  3. 互換性:

    • 新しいPythonのバージョンやExcelの最新機能をサポートしているのは**openpyxlpandas**です。

これらの情報が、あなたのPythonプロジェクトにおけるExcel操作の助けとなれば幸いです。

らくらくPython塾 – 読むだけでマスター

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座