【Python】Excelファイルを読み込む方法をわかりやすく解説
はじめに
皆さんは、PythonでExcelファイルを扱いたいと思ったことはないでしょうか。 多くの企業で日常的に利用されているExcelは、データの集計や管理などに使われる機会がたくさんあります。 しかし、手作業で大量のExcelファイルを処理するのはとても大変な作業になりがちです。 そこで活躍するのがPythonのプログラムです。 Pythonを使うと、Excelファイルの読み込みや編集を自動化できるため、作業効率を一気に高められます。
今回は、PythonでExcelファイルを読み込む方法をわかりやすく説明します。 初心者の皆さんがつまずきそうなポイントや、具体的なコード例も交えながら進めていきます。 Excelとプログラミングの両方をあまり経験していない場合でも、この記事を読めば基本的な流れを理解できるように構成しました。
この記事を読むとわかること
- Pythonを使ってExcelファイルを読み込む流れ
- pandasやopenpyxlなどの主要ライブラリを用いた実用的なサンプルコード
- 実務のシーンで役立つExcelファイル読み込みの具体例
- Excel取り込み時によくあるエラーや対処法
- 複数シートへの対応やデータ分析などの応用的な使い方
PythonでExcelファイルを扱うメリット
Pythonを使ってExcelファイルを読み込むと、手作業では大変なタスクをスムーズに自動化できるようになります。 例えば、大量の行や複数のシートからなるファイルを、一括で処理したいときに役立ちます。 特に、以下のようなメリットがあるでしょう。
単純作業の自動化ができる
日々の業務で単調なコピペ作業を繰り返すと、作業時間が膨大になるだけでなく、思わぬミスも生じやすくなります。 PythonでExcelファイルを読み込み、必要な部分だけを抽出して集計するなどの処理を記述しておけば、同じ作業を瞬時に何度も繰り返せます。 その結果、品質向上だけでなく、時間の有効活用にもつながります。
多彩なデータ処理と連携が容易
Excelファイル内にあるデータは、そのまま分析に回したり、別のファイル形式に変換したり、他のシステムに取り込んだりするケースがあります。 Pythonは、多くのライブラリを使うことでデータの前処理、可視化、機械学習など幅広い分野への応用が可能です。 Excelから読み込んだデータを、すぐに高度な解析や処理へ展開しやすいのは大きな強みです。
手作業によるミスを減らせる
Excelのセルに何度も数値を入力していると、一つでも入力ミスがあると後続の分析結果にも大きな影響を与えます。 自動化の仕組みを作れば、同じ手順を正確に繰り返すことができ、人的なヒューマンエラーを減らせます。 業務の信頼性を高めるうえでも、Pythonの自動処理は大いに役立ちます。
Excelファイルの基本構造と準備
ExcelファイルをPythonで扱うには、まずExcelの構造を理解しておくとスムーズです。 普段からExcelを使っている方にとっては当然の内容ですが、初心者の方には確認していただくと良いでしょう。
シートやセルについて
Excelファイルは、複数のシートを含むことができます。 それぞれのシートには行と列があり、その交差点にできるセルにデータを入力します。 PythonでExcelを取り扱うときには、どのシートのどこからデータを抽出するかを指定するケースが多いです。 一つのExcelファイルに複数のシートがある場合、シートの名前やインデックスを指定する必要があります。
ファイル拡張子の違い
Excelファイルの拡張子には、「.xlsx」「.xls」「.xlsm」などいくつか種類があります。 一般的な拡張子としては「.xlsx」が多く使われます。 Pythonのライブラリによっては、対応できる拡張子が限られる場合がありますので、読み込みたいファイルの拡張子を確認することが大切です。
ライブラリのインストール
Excelファイルを取り扱うために、Pythonでは主に pandas や openpyxl といったライブラリが使われます。 もしまだインストールしていなければ、端末のターミナルやコマンドプロンプトで以下のように入力して導入しましょう。
pip install pandas openpyxl
pandasを導入すると、自動的にopenpyxlも扱える場合がありますが、環境によっては別途のインストールを要することもあります。 念のため準備段階で明示的にインストールしておくと安心です。
PythonでExcelを読み込む準備
ここからは具体的にPythonコードを書いて、Excelファイルを読み込む流れを説明していきます。 まずは簡単なサンプルを用意し、どのように動作するのかを理解するところから始めましょう。
サンプルExcelファイルの作成
仮に「sample.xlsx」というファイルを作成し、A列に「名前」、B列に「年齢」、C列に「部署」などのデータを10行ほど入力してみます。 こうしたデータをPythonからどのように読み取れるか、実際のコード例で確認していきます。
Pythonスクリプトの下準備
PythonでExcelファイルを扱う際には、作業フォルダがExcelファイルと同じ場所にあると、ファイル指定が楽になることがあります。 パスの指定が苦手な方は、最初のうちは同じディレクトリに「excel_read.py」などのスクリプトを用意し、「sample.xlsx」も同じ場所に置くと良いでしょう。 もちろん、絶対パスや相対パスを正しく指定できれば、どのディレクトリにあっても問題はありません。
pandasを使ったExcelの読み込み
pandasはデータ解析向けのライブラリとして有名ですが、Excelファイルの読み込みにも手軽に使えるため、とても人気があります。 ここでは、基本的な使い方を紹介します。
read_excel関数での基本的な読み込み
pandasには read_excel という便利な関数が用意されています。 以下のコード例では、「sample.xlsx」の1番目のシートを指定せずに読み込み、読み込んだ結果を表示しています。
import pandas as pd # Excelファイルの読み込み df = pd.read_excel("sample.xlsx") # 特にシートを指定しないと、最初のシートが読み込まれる print(df) # DataFrameの内容を表示
上記のように実行すると、端末上にExcelファイルの内容がテーブル形式で出力されます。 pandasのDataFrameという形式で読み込まれるので、行と列を指定したり、並び替えを行ったり、列ごとの集計を行ったりと、さまざまな操作が可能になります。
シート名の指定
複数のシートがある場合は、 sheet_name パラメータを使ってシートを指定できます。 シート名を文字列で渡したり、インデックス番号(0から始まる)で指定することができます。
import pandas as pd df_sales = pd.read_excel("sample.xlsx", sheet_name="売上データ") # シート名で指定 df_sheet2 = pd.read_excel("sample.xlsx", sheet_name=1) # インデックス番号1のシートを読み込み print(df_sales) print(df_sheet2)
上記のように複数のシートを別々に読み込み、データを分けて処理することも容易にできるのです。
ヘッダー行や列の指定
Excelファイルには見出し行や余分な行が含まれている場合があり、最初の行からデータを読み込みたくないシーンも存在します。 そのようなときは header や usecols パラメータを活用します。 例えば、「最初の2行は説明文が書かれていて、3行目からが本当のヘッダー」というケースでは、headerを2に設定すると3行目がヘッダーとして認識されます。
import pandas as pd df_custom = pd.read_excel( "sample.xlsx", sheet_name="売上データ", header=2, usecols="A:C" # A列〜C列までを取り込み ) print(df_custom)
このようにpandasのread_excel関数は、細やかな指定ができるため、柔軟にExcelファイルを扱うことができます。
openpyxlを使ったExcelの読み込み
pandasはデータ解析に特化しているため、大量データや高度な分析にはとても使いやすいです。 一方、 openpyxl はExcelそのものの操作に強く、セルの書式や画像、グラフなども扱いやすいという特徴があります。 ここではopenpyxlを使ったExcelファイルの読み込み方法を見ていきます。
ワークブックとシートの取得
openpyxlでは load_workbook という関数を用いて、Excelファイルをワークブックとして読み込みます。 そのあと、シート名を指定して実際のシートオブジェクトを取得し、セルの値を取り出す仕組みです。
from openpyxl import load_workbook # Excelファイルの読み込み workbook = load_workbook("sample.xlsx") # シートの取得 sheet = workbook["Sheet1"] # シート名を明示 # あるいは sheet = workbook.active でアクティブなシートを取得 # セルの値の参照 value_a1 = sheet["A1"].value value_b2 = sheet.cell(row=2, column=2).value print("A1の値:", value_a1) print("B2の値:", value_b2)
上記では「Sheet1」というシートを取得し、特定のセルの値をプリントしています。 pandasのDataFrameではなく、Excelのシート構造を直接意識した形で扱えるのが特徴です。
範囲の指定やループ処理
openpyxlでは、セルをひとつひとつ確認しながら進めるような処理も可能です。 例えば、A列1行目からC列10行目までの値を取得したい場合は、以下のように書きます。
from openpyxl import load_workbook workbook = load_workbook("sample.xlsx") sheet = workbook["Sheet1"] for row in sheet["A1:C10"]: for cell in row: print(cell.value)
Excelのセルを直接扱うイメージでコードを書けるため、書式やコメント付きのセルなどが混在している場合にも細かく制御しながら読み込むことができます。 大量データを一気に加工するよりは、Excelファイルの見た目や構造をある程度尊重しながら処理したいときに使いやすいです。
Excelの実務活用例: 勤怠管理
PythonとExcelを組み合わせた実務活用例として、勤怠管理の読み込みを想定してみましょう。 社員名と出勤日、退勤日がExcelにまとまっており、そのExcelファイルを分析しながら自動的に勤怠時間を算出する例です。 こちらではpandasを使った方法で見てみます。
勤怠管理Excelのイメージ
仮に「attendance.xlsx」という名前で、以下のような構造を考えます。 A列に「社員名」、B列に「出勤時刻」、C列に「退勤時刻」、D列に「休憩時間」などが並んでいるとしましょう。 1行目はヘッダー行として、「名前」「出勤」「退勤」「休憩(分)」と記載されているものとします。
勤怠情報を読み込み、労働時間を計算する
Pythonコードでは、以下のように読み込んでから処理します。 実行イメージをつかんでいただくためのサンプルコードです。
import pandas as pd df_att = pd.read_excel("attendance.xlsx") # 出勤時刻と退勤時刻をdatetime型として扱いたい場合は、指定するパラメータが必要になる場合も # ここでは既にExcelが時刻形式で保存していると想定 # 労働時間を計算して、新しい列「実働時間」を追加(休憩時間を分単位で引く) df_att["実働時間"] = (df_att["退勤"] - df_att["出勤"]).dt.total_seconds() / 3600 - (df_att["休憩(分)"] / 60) print(df_att)
上記のようにpandasを使えば、退勤時刻 - 出勤時刻から得られる時間差を時間単位に変換し、休憩時間を差し引く処理をまとめて実施できます。 Excelで関数を複雑に組み合わせるよりも、コードとして明示できるため、管理がしやすくなるでしょう。
Excelの実務活用例: データ分析
もう一つの例として、売上データの集計や分析を行うシーンを考えてみます。 売上日、商品名、金額、担当者などの情報がExcelファイルにまとまっているケースは多いかもしれません。 Pythonを使えば、そのデータをグループごとに集計したり、特定の条件を満たすデータだけを抽出したりすることが容易です。
グループ集計の例
以下のコード例では、「sales.xlsx」というファイルから売上データを読み込み、商品ごと・担当者ごとの売上合計を計算しています。
import pandas as pd df_sales = pd.read_excel("sales.xlsx") # 商品名と担当者別に合計金額を集計 grouped = df_sales.groupby(["商品名", "担当者"])["金額"].sum().reset_index() print(grouped)
上記のように groupby を活用することで、ピボットテーブルを作るイメージで簡単に集計が可能です。 一度集計した結果をExcelやCSVに書き戻すことも簡単にできます。 このように「読み込み -> 処理 -> 書き込み」という流れをPythonで一貫して行うと、Excel作業の効率化が進むでしょう。
Excelの実務活用例: 複数シートの処理
実務では、一つのExcelファイルに複数のシートが存在し、それぞれが異なるデータを保持していることがあります。 例えば「1月度」「2月度」「3月度」シートで同じ形式の表が並んでいるケースなどです。
複数シートを一括で読み込む
pandasのread_excelでは、 sheet_name に None を指定することで、すべてのシートを辞書形式で読み込むことができます。
import pandas as pd df_dict = pd.read_excel("monthly_data.xlsx", sheet_name=None) for sheet_name, df_data in df_dict.items(): print(f"シート名: {sheet_name}") print(df_data.head()) # 先頭5行だけ表示
上記のように書くと、各シートの名前をキー、データを値とする形で読み込まれるため、シートごとに同じ処理を適用したいときに便利です。 例えば、すべてのシートの合計を計算して合算データを作るなどの操作も容易になります。
よくあるエラー対策
実際にPythonでExcelを読み込み始めると、文字コードの問題やファイルパスの指定ミスなどによってエラーに遭遇する場合があります。 ここでは、よくあるエラーと対処法を簡単に紹介します。
ファイルが見つからないエラー
エラー文として「FileNotFoundError: [Errno 2] No such file or directory: 'sample.xlsx'」と表示されることがあります。 これは、プログラムが指定したファイルを見つけられない状態を示しています。 ファイル名やディレクトリの指定に誤りがないか確認するか、正しいパスを記述するなどで対処します。
ライブラリがインポートできない
「ModuleNotFoundError: No module named 'pandas'」などのエラーが出ることがあります。 これは、pandasやopenpyxlがインストールされていないか、Pythonの環境が異なる可能性があります。 別の仮想環境で動かしていないかなどを確認し、必要に応じて再度インストールを行いましょう。
Excelファイルがパスワード保護されている場合やマクロが含まれている場合は、対応が難しいことがあります。 まずはパスワードを解除できないか、シート保護の影響がないかを調べてみてください。
データ型に関するエラー
時刻や日付の扱いで想定外の型変換が起きるケースも少なくありません。 pandasで読み込むと、一見数値に見える値がオブジェクト型として処理される場合があります。 その場合は、astype や to_datetime 関数などを使って明示的に型変換することでエラーを回避できることがあります。
PythonによるExcel操作の拡張
ここまで説明してきたのは、Excelファイルを「読み込む」部分に重きを置いた内容です。 ただ、Pythonを使えば読み込んだデータをもとに「書き込み」や「編集」まで自動化することも可能です。
openpyxlを使ったセルの書き換え
openpyxlではシートのセルを直接書き換えることが可能です。 下記はセルの値を変更し、新しいファイル名で保存する例です。
from openpyxl import load_workbook wb = load_workbook("sample.xlsx") sheet = wb["Sheet1"] sheet["A2"] = "変更後の値" wb.save("sample_modified.xlsx")
このように、Excelの見た目も含めて編集したい場合にはopenpyxlが便利です。 企業の帳票をPythonで自動更新し、報告書を作成するなどの活用も考えられます。
CSVや他形式への変換
Excelファイルからデータを取り出し、それを CSV 形式などに変換したい場合もあるでしょう。 pandasを使っている場合は、DataFrameの to_csv メソッドで手軽にCSVファイルへ書き出せます。
import pandas as pd df = pd.read_excel("sample.xlsx") df.to_csv("sample.csv", index=False, encoding="utf-8")
上記のように記述すれば、Excelで管理されていたデータをCSV化し、他のシステムに連携させやすくなります。 このような「Excel -> Python -> 別形式」という流れをマスターしておくと、非常に役立つ場面が多いでしょう。
PythonとExcelを組み合わせる際のポイント
PythonとExcelを組み合わせる作業を円滑に進めるためには、いくつかのポイントを押さえておくと良いでしょう。 ここでは、初心者の皆さんがつまずきやすい点や注意しておくと便利な点をまとめます。
ソースコードの管理
Excelファイルを定期的にバージョン更新するような現場では、「どのPythonスクリプトがどのExcelファイルを扱うのか」がわからなくなると混乱を招きやすくなります。 そのため、フォルダ構造を整理し、スクリプトとExcelファイルをわかりやすく配置しておくか、ファイル名やディレクトリパスを統一的に管理するなどの工夫が必要です。
小分けに処理を実装する
膨大な処理を一気に書くと、どこでバグが起きているか把握しづらくなります。 データの読み込み、前処理、集計、出力などの段階に分けてスクリプトを整理すると、問題の切り分けが容易です。 初心者の方ほど、処理を段階的にテストしながら進めるのがおすすめです。
データのバックアップ
Excelファイルを上書き保存するスクリプトを組む際は、思わぬミスで元データを壊してしまうリスクがあります。 元ファイルをコピーしておく、別名で保存するなどの対策を習慣づけることが大切です。 自動化による利便性は大きいですが、誤ったコードが実行されると被害も大きくなる可能性があります。
エラー処理とログ出力
実務でPythonスクリプトを使う場合、エラーが発生したときの挙動や、どのタイミングでエラーが起きたかの情報を記録しておくと、後々の対応がスムーズです。 特にExcelファイルの読み込みでは、行や列の数が期待と違う、シート名が不正、ファイルが別の場所に移動されたなど、さまざまな原因が考えられます。
例外処理を導入する
大まかな例として、以下のように try-except 構文を活用して、エラーが起きた場合にはログを表示する方法があります。
import pandas as pd try: df = pd.read_excel("sample.xlsx") # 何らかの処理 except FileNotFoundError as e: print("ファイルが見つかりませんでした:", e) except Exception as e: print("予期せぬエラーが発生:", e)
このようにしておけば、単に「エラーになった」とだけ表示するのではなく、原因の切り分けに役立つ情報を取得することができます。 より高度なログ管理には、専用のロギングライブラリを使う方法もあります。
大規模データの扱い
Excelファイルのサイズが非常に大きい場合は、pandasで読み込むだけでもメモリを圧迫してしまうことがあります。 そうした場合は、下記のような対策を検討することが多いです。
- 不要な列を読み込まない
- 複数のシートやファイルに分割する
- CSVやデータベースなど別形式への移行を検討する
Excelは使い勝手が良い反面、ビッグデータの解析には向かない場合もあるため、状況に応じて最適な形式を選ぶことが大切です。
Excelは手軽ですが、データが増えると動作が重くなりがちです。 大量データの取り扱いが想定される場合は、早めにデータベース化やCSVへの変換を検討してみましょう。
まとめ
今回は、PythonでExcelファイルを読み込む方法を中心に解説しました。 pandasやopenpyxlといったライブラリを使えば、Excelファイルをプログラムで扱うことが簡単になります。 実務でよくある勤怠管理や売上管理などでも、ExcelとPythonを組み合わせることで手作業を大幅に削減するアイデアが思いつくのではないでしょうか。
初心者の皆さんは、まず小さなExcelファイルを用意して、読み込みの練習から始めてみてください。 シートの選択や特定の列だけを抽出する操作に慣れてきたら、グループごとの集計やデータ加工などにも挑戦すると理解が深まります。
自分の実務での悩みや作業を振り返り、「Pythonに任せられる部分はないか?」と検討してみると、大きな効率化に繋がる可能性があります。 ぜひExcelとPythonの連携を活用して、業務や学習の幅を広げてみてください。