Pythonを使うとフォルダ内のエクセルファイルを読み込み、一つのファイルに結合することができます。
たとえばフォーマットの同じエクセルが複数拠点で作成され、それらを一つにまとめる作業があるとします。
もし一つ一つのエクセルを手作業で転記すると、ミスにつながる可能性があります。
しかし、この作業はPythonで自動で一つにつなげることが可能です。
そこで、Pythonでフォルダ内のExcelファイルを一つに結合する事例を紹介していきます。
・複数のエクセルを一つに結合して保存する
それでは以下で詳しく紹介していきます。
ExcelデータをPythonで処理するプログラムの概要
今回は、Pythonを使って取引先ごとに新しいシートを作成し、そこにデータを転記していくプログラムを解説します。
実際に以下の作業をpythonで行うことを目指します。
1. フォルダ内のExcelファイルを読み込む(複数ファイル)
2. 一つのExcelファイルに結合
3. 一つに集約したExcelファイルを保存
今回は取引先のデータファイルが10コあるので、それらのExcelファイルを1つに集約して保存します。
Pythonプログラムを実行するための準備
事前の準備として、pandasを使えるようにライブラリ設定をします。
pandasを使うことでデータを結合して、Excelを書き出すことができるようになります。
準備|pandasモジュールのインストール
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install pandas」と入力して[Enter]
4. インストール完了
これでインストールが完了し、pandas使えるようになります。
それでは以下でプログラムを解説していきます。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#プログラム1|ライブラリの設定 import glob import pandas as pd # プログラム2|所定フォルダ内の「data*.xlsx」を取得 files=glob.glob('data*.xlsx') # プログラム3|変数listを空リストで設定 list = [] # プログラム4|プログラム2で取得したエクセルを一つずつpandasデータとして取得 for file in files: list.append(pd.read_excel(file)) # プログラム5|listに格納されたエクセルファイルをpandasとして結合 df = pd.concat(list) # プログラム6|エクセルファイルを書き出す df.to_excel('total.xlsx', index=False) |
以下で詳細の解説をしていきます。
プログラム1|ライブラリの設定
1 2 3 |
#プログラム1|ライブラリの設定 import glob import pandas as pd |
このプログラムでは、2つのライブラリ設定をします。
1 2 3 |
#解説 ・フォルダ内のエクセルファイルを取得するためのライブラリ ・エクセルなどのデータを操作するためのライブラリ |
まず、globで所定のフォルダ内のExcelを取得できるようにします。
また、pandasでエクセルのデータを結合します。
プログラム2|所定フォルダ内の「data*.xlsx」を取得
1 2 |
#プログラム2|所定フォルダ内の「data*.xlsx」を取得 files=glob.glob('data*.xlsx') |
1 2 |
#解説 pythonファイルと同じフォルダに存在する「data*.xlsx」を全て取得 |
「*」はワイルドカードでどのような文字列でも対象になるため、ファイル名の最初が「data」、ファイル名の末尾が「.xlsx」の全てのファイルを変数filesに格納します。
したがって、この事例の場合は、以下のようになります。
なおこの事例では、対象のエクセルファイルをpythonプログラムと同じフォルダに保存してあります。
もしpythonを保存してあるフォルダと異なるフォルダのExcelファイルを結合したい場合は、「C:\Users\xxx\Dropbox\Python\Program\100_Excel\104_Excel_fileTenki」のようなフルパスを設定する方法があります。
プログラム3|変数listを空リストで設定
1 2 |
#プログラム3|変数listを空リストで設定 list = [] |
1 2 |
#解説 変数listを空リストとして設定 |
プログラム4|プログラム2で取得したエクセルを一つずつpandasデータとして取得
1 2 3 |
#プログラム4|プログラム2で取得したエクセルを一つずつpandasデータとして取得 for file in files: list.append(pd.read_excel(file)) |
1 2 3 |
#解説 プログラム2で取得したエクセルを一つずつ処理する 変数listに各エクセルのデータを格納 |
イメージとしては、変数listに各エクセルが配列として格納されている感じです。
list = [data_a.xlsx, data_b.xlsx, ・・・ ,data_j.xlsx]
この格納されたExcelファイルを次のプログラムで結合します。
プログラム5|listに格納されたエクセルファイルをpandasとして結合
1 2 |
#プログラム5|listに格納されたエクセルファイルをpandasとして結合 df = pd.concat(list) |
1 2 |
#解説 プログラム4で取得したlistをpd(pandas)で結合したデータを変数dfに設定 |
ここでは「data_a.xlsx」「data_b.xlsx」・・・「data_j.xlsx」を縦方向に結合します。
補足ですが、「df = pd.concat(list, axis=1)」と横方向にデータを結合させることができます。
プログラム6|エクセルファイルを書き出す
1 2 |
#プログラム6|エクセルファイルを書き出す df.to_excel('total.xlsx', index=False) |
1 2 |
#解説 変数dfをエクセルに変換して「total.xlsx」で保存する |
pandasの機能として.to_excelでデータをエクセルに変換することができます。
また「index=False」とすることでindexを削除します。
もし「index=False」を記載しないと、以下のように余計なデータが含まれるので、それを削除するために記載します。
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。