【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 番目のシートだけが読み込まれます。

# PANDAS_READ_EXCEL

# In[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 を指定します。

# In[2]

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

pandas.read_excel() 行ラベルを指定してExcelファイルをでーたフレームに格納
sheet_name で読み込むシートを指定できます。
2 番目のシートを選択する場合は sheet_name = 1 です。

# In[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 を読み込んでみましょう。

# In[4]

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

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

# In[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 列目 (氏名、性別、年齢) を読み込む場合は次のように記述します。

# PANDAS_READ_EXCEL_USECOLS

# In[1]

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] です。

# PANDAS_READ_EXCEL_SKIPROWS

# In[1]

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書籍データ
オプション引数なしで読み込むと失敗します:

# PANDAS_READ_EXCEL_BLANK

# In[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 で読み込む列を指定すると問題は解決します。

# In[2]

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

pandas.read_excel headerを指定

コメント

  1. 匿名 より:

    EXCEL_01-5 プログラムの実行結果で、0ページの末尾が改行されずに下記のようになります。
     
    {0:      ふりがな 性別 年齢      職業
    氏名
    ・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・・・・・・・・・・・・・・・・・・・・・・・税理士, 2:      ふりがな 性別  年齢      職業
    氏名
    ・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・・・・・・・・・・・・・・・・・・・・・スポーツ記者}
     
    Excel ファイルの読み込み時に使える、多数のオプション引数の使い方を教えていただき、ありがとうございました。

    • あとりえこばと より:

      コードの動作を再確認したところ、Jupyter Notebook では問題なく改行されましたが、おっしゃるように Google Colab では改行がうまくいきませんでした。pprint.pprint() で実行結果を出力すると解決すると思います。以下のコードを試してみてください。
      ――――――――――――――――――――――――――――――
      from pprint import pprint
      data = pd.read_excel(url, index_col=0, sheet_name=[0,2])
      pprint(data)
      ――――――――――――――――――――――――――――――

      • HNaito より:

        pprint( ) で「改行」がうまく処理されることを確認しました。
        ありがとうございました。