こんにちは、Zero-Cheeseです。
「Excelでの作業を、効率化したいと思ったことはありませんか?」
この記事を読む事で
- Pandasを使用した、Excelデータの読込み・書出し方法
- よく発生する、不具合への対応方法
を習得する事ができます。
この記事は、下記の方々を対象としています。
- Excelの手動作業に、多くの時間を消費している方
- Pandasを少しでも、触った事のある方
以前に、PythonからExcelを操作する方法として、下記記事を公開しています。
今回は、データ分析の必須ライブラリ「Pandas」の使用を前提に、ご紹介します。
![【 Python ✖️ Excel 】OpenPyXLとPandasによる、頻繁に使用する操作 まとめ](https://i0.wp.com/zero-cheese.com/wp-content/uploads/2022/07/a98b1120712ae2558c294773114e59b3-1.jpg?resize=320%2C180&ssl=1)
ExcelをPandasで操作する事の重要性
Microsoftより、ExcelにPythonの機能が実装されると、アナウンスされました。(2023年9月時点)
この新機能「Python in Excel」では、PandasのDataFrameが、使用できるとの情報があります。(Microsoftのパプリックプレビューで、紹介されています。)
Excelのマクロも強力なツールですが、Pandasを使用することで、さらに複雑なデータ分析や操作を、簡単かつ高速に実施できるようになります。
環境設定(使用ライブラリのインストール)
この章では、必要なライブラリのインストール方法を紹介します。
Pandasのインストール方法
pipを使用して、次のコマンドでインストールできます。
pip install pandas
pipに関する詳細は、以下の記事をご参照下さい。
![【Python】pipの使い型入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -](https://i0.wp.com/zero-cheese.com/wp-content/uploads/2021/09/a98b1120712ae2558c294773114e59b3-2.png?resize=320%2C180&ssl=1)
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を深くご存知ない方は、以下の講座をオススメします。
- Coursera
![](https://i0.wp.com/zero-cheese.com/wp-content/uploads/2023/09/image-3.png?resize=1024%2C519&ssl=1)
データサイエンスや機械学習に関する多岐のコースが提供されており、専門家や大学教授が講義を行っています。
多くのコースは無料で、受講可能です!
さいごに
本記事では、Pandasを用いてExcelの読込み・書込み処理の方法を、紹介しました。
Pandasに変換するだけで、多彩かつ高度なデータ分析手法を、活用することができます。
この記事が、皆さまのお役に立てれば、幸いです
最後まで読んでいいただき、ありがとうございました。
それではまた、お会いしましょう!