【Python】Excelを読み込む方法

openpyxl

PythonでExcelを読み込む3つの方法を紹介します。

PythonでExcelを読み込むための3つの方法

エクセルをPythonで操作するためのライブラリはいくつもあります。本記事では、次の3つのライブラリでエクセルを読み込んでみたいと思います。

  1. xlrd・・・Excelを読み込むための、シンプルなライブラリ
  2. OpenPyXl・・・Excelを操作して自動化するための多機能ライブラリ
  3. Pandas・・・表計算ライブラリで、Excelを読み込む機能もついている

下準備

まずは、pipコマンド(もしくはpip3)で、必要なライブラリをインストールしましょう。

$ pip install xlrd 
$ pip install openpyxl
$ pip install pandas

また、読み込むためのエクセルファイルも作ってください。本記事では、次のようなエクセルファイルをPythonファイルと同じ階層に設置しました。

python_excel_load
読み込むためのエクセルファイル

xlrdライブラリでExcelを読み込む

まず、エクセルを読み込むための順序をイメージします。

  1. ライブラリのインポート
  2. エクセルファイルを読み込む
  3. エクセルのシートを読み込む
  4. セルにアクセスしてデータを取り出す

まずは簡単なコードから。

import xlrd #ライブラリのインポート
wb = xlrd.open_workbook('test.xlsx') #エクセルファイルをロード
ws = wb.sheet_by_name('Sheet1') #エクセルシートを取得

print(ws.cell(0,0)) #一番左上のセルを取得

すると、次のような出力がされます。

text:'ranking' 

1. Excelファイルの読み込み

wb = xlrd.open_workbook('test.xlrd')

で、 Excelファイルを読み込んでいます。open_workbook()メソッドの引数に、相対パスか絶対パスで入力します。
Pythonファイルと同じフォルダの中に格納していれば、例のようにファイル名を指定するだけです。

2. シートの読み込み

1で作成したワークブックオブジェクト(wb)からシートを取得します。

ws = wb.sheet_by_name('Sheet1')

で、’Sheet1’という名前のシートを取得しています。シート名が不明な場合、sheet_names()メソッドで取得することができます。

names = wb.sheet_names()
print(names)
# ['Sheet1']

リスト形式で、シートの名前が返されます。

また、同時に複数のシートを取得することもできます。

sheets = wb.sheets()
print(sheets[0].name)
# 'Sheet1'

3. セルの読み込み

2のステップで作成したシートオブジェクトからセルを取得します。

cell = ws.cell(0,0) #セルの取得
print(cell)
# text:ranking

cell()メソッドで1つのセルを取得できます。cell(行, 列) を数値で指定します。行は縦、列は横に対応しています。
返される値は「セル値の形式:セル値」です。

セル値のみ取得する場合は、value属性を使います。

cell = ws.cell(0,0).value #値のみ
print(cell)
# ranking

また、行ごと、列ごと取得することもできます。

cells = ws.col(1) #列ごと取得
print(cells)
# [text:'おすすめアーティスト', text:'アラン・ウォーカー', text:'マーティン・ギャリックス', text:'イマジン・ドラゴンズ', text:'マディリン・ベイリー', text:'カルヴィン・ハリス', text:'クリーン・バンディット']
cells = ws.row(0) #行ごと取得
print(cells)
# [text:'ranking', text:'おすすめアーティスト']

こちらも、セル値の書式も一緒なので、値だけ取得する方法も紹介します。

cells = ws.col_values(1) #列の値だけ
print(cells)
# ['おすすめアーティスト', 'アラン・ウォーカー', 'マーティン・ギャリックス', 'イマジン・ドラゴンズ', 'マディリン・ベイリー', 'カルヴィン・ハリス', 'クリーン・バンディット']
cells = ws.row_values(0) #行の値だけ
print(cells)
# ['ranking', 'おすすめアーティスト']

OpenPyXlライブラリでExcelを読み込む

さて、 Excel操作ライブラリといえば、OpenPyXlです。こちらも、xlrdの時と同じで、ワークブック読み込み→シートの読み込み→セルの取得という流れになります。

まずは簡単なコードとその出力を紹介します。

import openpyxl  #ライブラリのインポート

wb = openpyxl.load_workbook('test.xlsx') #エクセルファイルの読み込み
ws = wb.active #エクセルシートの読み込み

print(ws['A1'].value) #セルの値の取得
# ranking

1. Excelファイル(Workbook)の読み込み

openpyxlのload_workbook()メソッドに、ファイル名を引数として渡すと、エクセルのファイルを読み込むことができます。

wb = openpyxl.lord_workbook('test.xlsx') #エクセルファイルの読み込み

2. シートの読み込み

シートを読み込む方法は、複数あります。いずれも、1で作ったワークブックオブジェクトから取得します。

ws = wb.active #ファイルを開いたときに開かれるシート

active属性で取得できるのは、ファイルを開いたときに表示されるシートです。

また、シート名から直接取得することもできます。

ws = wb['Sheet1'] #シート名で取得

他にも、シートのインデックス(シートの並び順)で取得する方法もあります。

ws = wb.worksheets[0] #シートをインデックスで取得

3. セルの読み込み

セルの読み込み方はたくさんあります。本記事では、理解しやすい方法を解説します。

まずは、’A1’のように直接セルを指定する方法です。

cell = ws['A1']
print(cell)
# <Cell 'Sheet1'.A1>

A1のセルオブジェクトが返ってきました。セルの値を取得するにはvalue属性を使用します。

cell = ws['A1'].value
print(cell)
# ranking

次に、複数のセルを取得してみましょう。

cell = ws['A1':'B7'] #A1からB7までの2次元のセルを取得
print(cell)
# ((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>), (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>), (<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>), (<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>), (<Cell 'Sheet1'.A7>, <Cell 'Sheet1'.B7>))

ここから、セルの値を取得するには繰り返し処理する必要があります。

for column in cell:
    for  cell  in column:
        print(cell.value)
# ranking
# おすすめアーティスト
# 1
# アラン・ウォーカー
# 2
# マーティン・ギャリックス
# 3
# イマジン・ドラゴンズ
# 4
# マディリン・ベイリー
# 5
# カルヴィン・ハリス
# 6
# クリーン・バンディット

さらに詳しく学びたい方は、こちらの記事が参考になります。

Pandasで Excelを読み込む

Pandasは表計算ライブラリです。データサイエンティスト必須のアイテムで、彼らはExcelよりもPandasを使った方が自在にデータを操ることができます。そんなPandasでExcelを読み込むのは、とっても簡単です。

import pandas as pd
df = pd.read_excel('test.xlsx')
print(df)

#     0             1
# 0  ranking    おすすめアーティスト
# 1        1     アラン・ウォーカー
# 2        2  マーティン・ギャリックス
# 3        3    イマジン・ドラゴンズ
# 4        4    マディリン・ベイリー
# 5        5     カルヴィン・ハリス

read_excel()メソッドにファイル名を渡すだけです。すると、pandasのデータフレームとして読み込んでくれます。

Pandasについて、詳しくまとめてくれているサイトで、Pandasでのデータの扱い方について学んでみましょう。

Appendix

xlrd公式サイト(英語)
OpenPyXl公式サイト(英語)
OpenPyXlについて詳しいサイト
Pandasについて詳しいサイト

・参考書籍:Excel×Python最速仕事術
・参考書籍:PythonでExcel、メール、Webを自動化する本

Excel×Python最速仕事術
著者:金宏 和實
価格:2158円(Kindle)