[pandas] Excelファイルの読み込み

[pandas] Excelファイルの読み込み

pandas.read_excel()

 pandas.read_excel() を使うと、Excel ファイルをデータフレームに読み込むことができます。この関数は xlsxlsx ファイルをサポートします。xls は Excel 2003 以前、xlsx は Excel 2007 以降のバージョンで使用されている Excel ファイルの形式です。データフレームを Excel ファイルへ書き込む方法については以下の記事を参照してください。

Excelファイルを読み込む

 当サイトの上位サイト atelierkobato.com から NPSAO_03.xlsx を読み込んでデータフレームに格納してみましょう。このファイルには氏名 (Name)、ふりがな (Phonetic)、性別 (Sex)、年齢 (Age)、職業 (Occupation) の 5 項目の疑似個人情報が 5 名ずつ 3 枚のシートに収められています。

pandas Excelファイル (xls, xlsx) の読み込み

 キーワード引数を何も指定しないと、1 番目のシートだけが読み込まれます。

# PRE_01-1

import numpy as np
import pandas as pd

url = "https://atelierkobato.com/wp-content/uploads/NPSAO_03.xlsx"
data = pd.read_excel(url)
data

 pandas.read_excel() オプション引数なしでExcelファイルを読み込む

 デフォルト設定ではシートの 1 行目は列ラベルとして読み込まれ、行ラベルには自動的に数字が割り当てられます。氏名 (シートの左端の列) を行ラベルに設定する場合は index_col=0 を指定します。

# PRE_01-2

data = pd.read_excel(url, index_col=0)
data

pandas.read_excel() 行ラベルを指定してExcelファイルをでーたフレームに格納

sheet_name で読み込むシートを指定する

 sheet_name で読み込むシートを指定できます。
 2 番目のシートを選択する場合は sheet_name = 1 です。

# PRE_01-3

data = pd.read_excel(url, index_col=0, sheet_name=1)
data

pandas.read_excel() sheet_name=1

 sheet_name にシート名を渡して読み込むこともできます。NPSAO_03.xlsx ファイルの各シートには List1, List2, List3 という名前が付けられています。List3 を読み込んでみましょう。

# PRE_01-4

data = pd.read_excel(url, index_col=0, sheet_name="List3")
data

sheet_name sheet_name="List3"

 複数シートをまとめて読み込んだ場合、シート番号を key、データフレームを値とする OrderedDict が返ってきます。

# PRE_01-5

data = pd.read_excel(url, index_col=0, sheet_name=[0,2])
data

sheet_name 複数ワークシート

 sheet_name に None を渡した場合はすべてのシートを読み込みます。
 

usecols で読み込む列番号を指定する

 usecols に整数リストを渡すと、リストの要素に対応する列だけ読み込むことができます。たとえば、NPSAO_03.xlsx の最初のシートの 1, 3, 4 列目 (氏名、性別、年齢) を読み込む場合は次のように記述します。

# PRE_02

url = "https://atelierkobato.com/wp-content/uploads/NPSAO_03.xlsx"
data = pd.read_excel(url, usecols=[0,2,3])
data

 pd.read_excel usecols
 

skiprows で読み込まない行番号を指定する

 skiprows でシートから読み込まない行を指定できます。たとえば、シートの 4 行目と 5 行目を読み込まない場合は skiprows = [3, 4] です。

# PRE_03

url = "https://atelierkobato.com/wp-content/uploads/NPSAO_03.xlsx"
data = pd.read_excel(url, skiprows=[3,4])
data

pandas.read_excel skiprows
 

空白セルの処理

 実際には、Excel のワークシートには様々な形でデータが格納されているので、pandas がデータをどのように取り込むかを知っておかないと戸惑うこともあります。たとえば、 atelierkobato.com の book.xlsx には架空書籍のタイトル、著者、出版社が次のような形で記載されています。

pandas.read_excel Excel書籍データ

 オプション引数なしで読み込むと失敗します:

# PRE_04-1

url = "https://atelierkobato.com/wp-content/uploads/book.xlsx"
data = pd.read_excel(url)
data

pandas.read_excel 空白に囲まれた表

 デフォルトでは自動的に最初の行をヘッダー (見出し) に設定しますが、ワークシートの一番上の行が空白になっているので、Unnamed:x という列ラベルが勝手に割り当てられてしまいます。

 NaN が並ぶ列はシートの左端の空白の列に対応しています。

 Excel では表が空白のセルに囲まれていることはよくありますが、header でヘッダー、usecols で読み込む列を指定すると問題は解決します。

# PRE_04-2

data = pd.read_excel(url, header=3, usecols=[1,2,3])
data

pandas.read_excel headerを指定