Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでフォルダ内のすべてのExcelファイルを一括マージする方法

Pythonを使えば、フォルダ内に散らばった複数のExcelファイルをわずか数行のコードで1つのファイルにまとめることができます。本記事では、標準ライブラリのglobモジュールと、データ分析に欠かせないpandasを組み合わせて、Excelファイルを一括結合する手順を詳しく解説します。

前提条件:必要なパッケージのインストール

まず、Excelファイルを読み書きするために以下のパッケージが必要です。まだインストールしていない場合は、pipコマンドで導入しておきましょう。

pip install openpyxl xlrd
  • openpyxl:xlsx形式(Excel 2007以降)の読み書きに使用
  • xlrd:xls形式(旧バージョン)の読み取りに使用

マージ対象のサンプルファイル

今回は、デスクトップ上に保存された以下の2つのExcelファイルをマージします。

  • Sales1.xlsx(売上データその1)
  • Sales2.xlsx(売上データその2)

この2つのファイルを縦方向に連結し、「Output.xlsx」という1つのファイルにまとめていきます。

ステップ1:globでExcelファイルの一覧を取得する

最初に、マージしたいExcelファイルが保存されているパスを指定し、glob.glob()を使って拡張子が「.xlsx」のファイルをすべて取得します。

path = "C:\\Users\\amit_\\Desktop\\"

filenames = glob.glob(path + "*.xlsx")
print('File names:', filenames)

これにより、指定フォルダ内のすべてのExcelファイルのパスがリストとして取得でき、後続の処理で順番に読み込むことができます。

ステップ2:マージ結果を格納する空のDataFrameを作成する

次に、結合後のデータを受け入れるための空のDataFrameを用意します。

outputxlsx = pd.DataFrame()

ステップ3:forループで各ファイルを読み込み、連結する

ここが処理の核心部分です。forループでファイルを1つずつ取り出し、pd.read_excel()で読み込んだ後にpd.concat()でシートごとのデータを統合し、出力用のDataFrameへ追加していきます。

for file in filenames:
    df = pd.concat(pd.read_excel(file, sheet_name=None), ignore_index=True, sort=False)
    outputxlsx = outputxlsx.append(df, ignore_index=True)

完全なサンプルコード

ここまでの手順をまとめたコード全体は以下の通りです。

import pandas as pd
import glob

# デスクトップからマージ対象のExcelファイルを取得
path = "C:\\Users\\amit_\\Desktop\\"

# 拡張子.xlsxのファイルをすべて読み込む
filenames = glob.glob(path + "*.xlsx")
print('File names:', filenames)

# マージ結果を格納する空のDataFrameを作成
outputxlsx = pd.DataFrame()

# forループですべてのExcelファイルを反復処理
for file in filenames:
    # read_excel()で読み込んだ後、concat()で連結
    df = pd.concat(pd.read_excel(file, sheet_name=None), ignore_index=True, sort=False)

    # Excelファイルのデータを出力用DataFrameへ追加
    outputxlsx = outputxlsx.append(df, ignore_index=True)

print('Final Excel sheet now generated at the same location:')
outputxlsx.to_excel("C:/Users/amit_/Desktop/Output.xlsx", index=False)

実行結果

スクリプトを実行すると、コンソールに読み込まれたファイル名の一覧が表示され、同じフォルダ内にマージ済みのOutput.xlsxが自動生成されます。Sales1.xlsxとSales2.xlsxの全データが1枚のシートにまとめられています。

補足:pandas 2.0以降での注意点

DataFrame.append()メソッドはpandas 1.4で非推奨となり、pandas 2.0以降では削除されています。最新の環境では、代わりにDataFrameをリストに集めてpd.concat()で一度に結合する方法が推奨されます。

# pandas 2.0以降で推奨される書き方
df_list = []
for file in filenames:
    df = pd.concat(pd.read_excel(file, sheet_name=None), ignore_index=True, sort=False)
    df_list.append(df)

result = pd.concat(df_list, ignore_index=True, sort=False)
result.to_excel("C:/Users/amit_/Desktop/Output.xlsx", index=False)

この方法なら、古いバージョン・新しいバージョンどちらのpandasでも問題なく動作させられます。

まとめ

globモジュールでファイル一覧を取得し、pandasのread_excelとconcatを組み合わせることで、フォルダ内の複数のExcelファイルを簡単に1つにまとめられます。月次レポートや店舗別データなど、同じ形式のファイルが大量にある場合の集計作業を大幅に効率化できるので、ぜひ活用してみてください。

  1. Excelファイルを列基準で結合する3つの方法|VLOOKUP・INDEX/MATCH・Power Query

    同じ人物や項目に関する情報が、複数のExcelブックに分かれて保存されていることは珍しくありません。たとえば、あるブックには「氏名」と「役職」、別のブックには「氏名」と「給与」が記録されているようなケースです。この記事では、こうして分散した情報を1つのワークシートにまとめるための、列を基準としたExcelファイルの結合方法を3つご紹介します。 以下の画像は、「Merge Files」という名前のファイルに保存された氏名と対応する役職の一覧です。 次の画像は、「Merge Files (lookup)」という名前のファイルに保存された氏名と給与の一覧です。 列を基準にExcelファイルを結合

  2. ExcelでCSVファイルを結合する2つの簡単な方法【コマンドプロンプト・Power Query】

    CSVファイル(カンマ区切り値ファイル)は、表形式のデータを保存できるテキスト形式のファイルです。メモ帳などのテキストエディタや、Microsoft Excelのような表計算ソフトで開くことができます。CSVファイルは、異なるソフトウェア間でデータをやり取りする際によく利用されています。複数のCSVファイルを結合(マージ)することで、1つにまとめることも可能です。この記事では、ExcelでCSVファイルを結合する2つの簡単な方法をわかりやすく解説します。シンプルかつ手軽にCSVファイルをまとめたい方にとって、きっと役立つ内容となっています。 説明を分かりやすくするため、T20ワールドカップに出