こんにちは、Zero-Cheeseです。
「Excelでの作業を、効率化したいと思ったことはありませんか?」
この記事を読む事で
- Pandasを使用した、Excelデータの読込み・書出し方法
- よく発生する、不具合への対応方法
を習得する事ができます。
この記事は、下記の方々を対象としています。
- Excelの手動作業に、多くの時間を消費している方
- Pandasを少しでも、触った事のある方
以前に、PythonからExcelを操作する方法として、下記記事を公開しています。
今回は、データ分析の必須ライブラリ「Pandas」の使用を前提に、ご紹介します。
ExcelをPandasで操作する事の重要性
Microsoftより、ExcelにPythonの機能が実装されると、アナウンスされました。(2023年9月時点)
この新機能「Python in Excel」では、PandasのDataFrameが、使用できるとの情報があります。(Microsoftのパプリックプレビューで、紹介されています。)
Excelのマクロも強力なツールですが、Pandasを使用することで、さらに複雑なデータ分析や操作を、簡単かつ高速に実施できるようになります。
環境設定(使用ライブラリのインストール)
この章では、必要なライブラリのインストール方法を紹介します。
Pandasのインストール方法
pipを使用して、次のコマンドでインストールできます。
pip install pandas
pipに関する詳細は、以下の記事をご参照下さい。
Excel操作のためのエンジンのインストール
PandasからExcelを操作するために、必要なエンジンをご紹介します。
XLSX用(現在の主流な、Excel形式)
.xlsx
形式のExcelファイルを、操作するためのエンジンです。
pip install openpyxl
旧式のxlsファイル用(読込み専用)
以前の.xls
形式のExcelファイルを、読み込むためのエンジンです。
pip install xlrd
旧式のxlsファイル用(書込み・保存専用)
.xls
形式のExcelファイルを、書き込む(保存する)ためのエンジンです。
pip install xlwt
Pandasによる、Excelの読込み方法
Pandasで、ExcelファイルをDataFrameとして読込む方法を、ご紹介します。
読込み方法(基本形)
import pandas as pd
df = pd.read_excel("sample.xlsx")
engineの指定
read_excel()
メソッドでは、ファイルの形式に合わせて適切なengineを自動的に選択しますが、明示的に指定することも可能です。
df = pd.read_excel("sample.xlsx", engine="openpyxl")
Excelの何行目を、DataFrameのカラム名として、使用するかを指定
df = pd.read_excel("sample.xlsx", header=1)
header
引数のインデックスは、0から始まります。
したがって、header=1
を指定すると、Excelファイルの2行目をカラム名として、使用されます。
特定の列を読込む
df = pd.read_excel("sample.xlsx", usecols="A:C")
上記の場合、A列からC列まで、読込まれます。
特定の行の範囲を読込む
df = pd.read_excel("sample.xlsx", skiprows=2, nrows=5)
skiprows
は、指定した数だけ先頭の行をスキップして、その後の行からデータを読込みます。
したがって、skiprows=2
とすると、最初の2行(1行目と2行目)をスキップして、3行目からデータを読み込むことになります。
nrows
は、読み込む行の数を指定します。
nrows=5
と指定すると、読み込み開始位置から5行分のデータだけ、読込みます。
特定のシートを読込む
df = pd.read_excel("sample.xlsx", sheet_name="Sheet2")
Pandasによる、Excelへの書出し方法
Pandasを使用して、DataFrameをExcelファイルに書き出す方法を、ご紹介します。
この章では、with構文を使った方法を、ご紹介しています。
Excelにデータを書き出す際、with
構文を使うと、ファイルのリソースを自動的に解放できます。
これにより、書き込み操作が完了した後、他プロセスやアプリケーションで、Excelファイルを開くことができるようになります。
書込み方法(基本形)
with pd.ExcelWriter("output.xlsx") as writer:
df.to_excel(writer)
engineの指定
ファイルの形式に合わせて、適切なengineを自動的に選択しますが、明示的に指定することも可能です。
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer)
DataFrameのカラム名、書出し設定
DataFrameのカラム名を、Excelファイルに書出すかどうかを、指定できます。
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer, header=False)
header引数をFalseにすると、書き出されません。(デフォルト値:True)
DataFrameのindex、書出し設定
DataFrameのインデックスを、Excelファイルに書出すかどうかを、指定できます。
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer, index=False)
index引数をFalseにすると、書き出されません。(デフォルト値:True)
Excelの行、開始位置を指定
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer, startrow=2)
startrow: デフォルトは0
です。これは、Excelの最上部からデータが書き込まれることを意味します。
このコードでは、3行目からデータが書き込まれるようにしています。
Excelの列、開始位置を指定
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer, startcol=1)
startcol: デフォルトも0
です。これは、Excelの最左列からデータが書き込まれることを意味します。
このコードでは、2列目からデータが書き込まれるようにしています。
シート名を指定して、書出し
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
df.to_excel(writer, sheet_name="Data")
Excelの読込み特有の、不具合対応
Excelのファイルは、独自の書式や特有のデータ形式を持つことが多く、Pandasで読込む際に、不具合が発生する事があります。
本章では、これらの問題とその解決方法について詳しく解説します。
Excel特有のデータ形式の取扱い
日付データへの型変換
Excelの日付データは特に扱いが難しく、異なる型(文字列等)で、読み込まれることが多いです。
# 文字列を日付型に変換
df['date_column'] = pd.to_datetime(df['date_column'], errors='coerce')
errors='coerce'
オプションを指定することにより、変換できないデータは、欠損値(NaN)
になります。
これにより、変換中のエラーを防ぎつつ、不正なデータを欠損値として取り扱うことができます。
数値データへの型変換
Excelのセル書式設定により、数値が文字列として読み込まれることがあります。
# 文字列を数値型に変換
df['number_column'] = pd.to_numeric(df['number_column'], errors='coerce')
クレンジング 不要な行や列の削除
Excelファイルには余計なヘッダーやフッタ、注釈などが含まれることが多く、その場合、削除します。
# 最初の5行を削除
df = df.iloc[5:]
マージセルの取り扱い
マージセルは、Pandasで読み込むと、欠損値(NaN)となることが多いです。
これに対処する方法を示します。(下記は一例です。)
# 前の値で欠損値を埋める
df.fillna(method='ffill', inplace=True)
ffill
は”forward fill”の略で、欠損値を前方の値で補完する方法を示します。
df.fillna(method='ffill')
を使用すると、DataFrame内のNaN
値は、直前の有効な値で埋められます。
文字化け(エンコード)の問題
近年のExcelでは、.xlsx
形式が主流となっており、XMLベースという事もあり、エンコードの問題は、あまり発生しません。
発生した場合、
- 日本のWindows環境で作成されたExcelファイルならShift_JISを、
- アメリカのWindows環境で作成されたものならcp1252を
試してみるるのがオススメです。
(Macは基本、UTF-8、UTF-16です。 つまり指定は、不要です。)
更なる学習のためのリソース
本記事では、Pandasを用いてExcelの読込み・書込み処理に焦点を当てて、解説してきました。
しかし、Pandasを深く理解していないと、高度な統計分析やデータサイエンスへの応用が、難しくなります。
ここまでお読みいただいた読者の中で、Pandasを深くご存知ない方は、以下の講座をオススメします。
- Udemyによる、オンライン学習
データサイエンスに必須となる、Pandasを始め、NumPyやmatplotlibなどのライブラリの使い方について、詳細に解説されています。
- Coursera
データサイエンスや機械学習に関する多岐のコースが提供されており、専門家や大学教授が講義を行っています。
多くのコースは無料で、受講可能です!
さいごに
本記事では、Pandasを用いてExcelの読込み・書込み処理の方法を、紹介しました。
Pandasに変換するだけで、多彩かつ高度なデータ分析手法を、活用することができます。
この記事が、皆さまのお役に立てれば、幸いです
最後まで読んでいいただき、ありがとうございました。
それではまた、お会いしましょう!