PythonでExcelを読み込む3つの方法を紹介します。
Contents
PythonでExcelを読み込むための3つの方法
エクセルをPythonで操作するためのライブラリはいくつもあります。本記事では、次の3つのライブラリでエクセルを読み込んでみたいと思います。
- xlrd・・・Excelを読み込むための、シンプルなライブラリ
- OpenPyXl・・・Excelを操作して自動化するための多機能ライブラリ
- Pandas・・・表計算ライブラリで、Excelを読み込む機能もついている
下準備
まずは、pipコマンド(もしくはpip3)で、必要なライブラリをインストールしましょう。
$ pip install xlrd
$ pip install openpyxl
$ pip install pandas
また、読み込むためのエクセルファイルも作ってください。本記事では、次のようなエクセルファイルをPythonファイルと同じ階層に設置しました。
xlrdライブラリでExcelを読み込む
まず、エクセルを読み込むための順序をイメージします。
- ライブラリのインポート
- エクセルファイルを読み込む
- エクセルのシートを読み込む
- セルにアクセスしてデータを取り出す
まずは簡単なコードから。
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を自動化する本