Pythonで複数のExcel・CSVを結合(マージ)する方法

Pythonで、Excel・CSVを結合することもできます。
その方法を解説してみました。

※Pythonのコード by Leitz Phone 1

 

Pythonで複数のExcelファイルを結合

Pythonを使うと、複数のExcelファイルを結合できます。

たとえば、こういったExcelファイルが

1つのフォルダに複数あるとします。
これらをPythonで1つにできるのです。

このように。

このコードです。
前提条件や準備は、後述します。
☆のフォルダ名はそれぞれ変えていただければ。

#■初期設定
#ライブラリの読み込み
import glob
import pandas 

# 読み込んだファイルを入れるリストを準備
lists = []

#☆フォルダ、ファイルの種類を指定
folder='/Users/yoichiinoue/Dropbox/data/*.xlsx'

#結合後のExcelファイル名を指定
excel_file_name='merge.xlsx'

#1 フォルダ内のファイル一覧を読み込み
file_list=glob.glob(folder)

#2 ファイル一覧をExcelでリストへ追加
for i in file_list:
    lists.append(pandas.read_excel(i))

#3 リスト内のExcelをマージ
merge_data = pandas.concat(lists)

#4 マージしたデータをExcelへ書き込み
merge_data.to_excel(excel_file_name,index=0)

少し変更すれば、CSVにも対応可能です。
(赤字が変えたところ)

#■初期設定
#ライブラリの読み込み
import glob
import pandas 

# 読み込んだファイルを入れるリストを準備
lists = []

#フォルダ、ファイルの種類を指定
folder='/Users/yoichiinoue/Dropbox/data/*.csv'

#結合後のExcelファイル名を指定
excel_file_name='merge.xlsx'

#1 フォルダ内のファイル一覧を読み込み
file_list=glob.glob(folder)

#2 ファイル一覧をExcelでリストへ追加
for i in file_list:
    lists.append(pandas.read_csv(i ,encoding='cp932'))

#3 リスト内のExcelをマージ
merge_data = pandas.concat(lists)

#4 マージしたデータをExcelへ書き込み
merge_data.to_excel(excel_file_name,index=0)

Excelを結合するほうのコードを解説します。
どういうものか、理解しておくのが好ましいので。

Pythonのコードの解説

 

ライブラリの読み込み

Pythonではライブラリという機能を読み込み、それを使うことができます。
今回使うのは、
・フォルダ、ファイルを操作するglob
・Excel、CSVを操作するpandas
これらを読み込みます。

このうち、pandasは、事前にインストールしなければいけません。
Windows Power Shell(Windows)、ターミナル(Mac)で、このようにインストールしましょう。

pip install pandas

※PIP自体のアップデートが必要な場合もあります。

pip install –upgrade pip

#■初期設定
#ライブラリの読み込み
import glob
import pandas 

リストの準備

次にリストを準備します。

# 読み込んだファイルを入れるリストを準備
lists = []

リストとは、
[1,2,3] といったもので、このリストにすれば、pandasでマージもできるのです。
この空のリストをまず準備し、listsという名前をつけます。

フォルダ、ファイルの種類、結合後のファイル名を指定

結合したいファイルを1つのフォルダに入れ、そのフォルダを指定しましょう。
folderという名前をつけています。

さらに、結合後のファイル名をつけましょう。
merge.Xlsxというファイル名で、excel_file_nameという名前をつけました。

☆フォルダ、ファイルの種類を指定
folder='/Users/yoichiinoue/Dropbox/data/*.xlsx'

#結合後のExcelファイル名を指定
excel_file_name='merge.xlsx'

こういったフォルダ名を書くには、Windowsならエクスプローラーで選択して[パスのコピー]

MacならFinderで選択して[〜のパス名をコピー]を使いましょう。

フォルダにあるファイル一覧を読み込み

次にライブラリglobの機能を使い、フォルダにあるファイル一覧を読み込みます。
Excelファイルだけ読み込みたいので、.xlsxと、指定しました。
CSVファイルなら、
.csvです。
その一覧にfile_listという名前をつけました。

#1 フォルダ内のファイル一覧を読み込み
file_list=glob.glob(folder)

glob.glob(フォルダ名)で、そのフォルダにあるファイル一覧を読み込めます。

試しに、
print(file_list)
で出力してみました。
こんな感じです。
間違いなく読み込まれています。

そのファイル一覧をExcelで読み込み、リストへ

次に、pandasの機能、read_excel(ファイル名)で、Excelファイルの中を読み取り、それを空のリストへ追加していきます。

#2 ファイル一覧をExcelでリストへ追加
for i in file_list:
    lists.append(pandas.read_excel(i))

forは繰り返しという意味で、for i in file_list:で、file_list(ファイル一覧)のファイルに繰り返し処理をします。
どんな処理をするかは、インデント(字下げ)をつけて書いたlists.append(pandas.read_excel(i))です。
lists.appned(○)で、リストに○を追加できます。
lists=[1,2,3] で、
lists.append(4)
を書けば、
list=[1,2,3,4] となるのです。

 

pandas.read_excel(○)
で、○というファイル名のExcelを読み込めます。

lists.append(pandas.read_excel('/Users/yoichiinoue/Dropbox/data/大崎支店.xlsx’))
print(lists)

lists.append(pandas.read_excel('/Users/yoichiinoue/Dropbox/data/東京支店.xlsx’))
print(lists)

これをフォルダにある12個のファイルで繰り返すのです。
毎回○を入れていたら大変ですので、iとして、iに1、2、3、4……といれて12まで繰り返しています。

for i in file_list:
lists.append(pandas.read_excel(i))
print(lists)

リスト内のExcelをマージ

リストにしたExcelファイルは、pandasの機能でマージできます。

#3 リスト内のExcelをマージ
merge_data = pandas.concat(lists)

pandas.concat(○)
で、○というリストをマージできるのです。
merge_dataという名前をつけました。

マージしたデータをExcelへ

最後は、そのマージしたデータをExcelに書き込みます。

#4 マージしたデータをExcelへ書き込み
merge_data.to_excel(excel_file_name,index=0)

これもpandasの機能で、
○.to.excel(△)
で、○を△というファイルに書き込みます。
△は、冒頭で指定したmerge.xlsxです。
そのあとの、index=0は、番号を表示させないという指定。
これがないと、こうなります。

まあ、あってもいいといえばいいんですけど。

ExcelマクロかPythonか

Excelファイル、CSVファイルの結合は、Excelマクロでもできます。

フォルダ内のExcel・CSVを1つにまとめる(結合する、マージする)マクロ | EX-IT

Excelの機能でも。

フォルダ内の複数のExcelファイルを結合する「取得と変換」(Power Query)

Pythonの場合、
・Pythonのインストール
・アップデート
といった手間もかかります。

PythonとEXCELマクロ比較。Pythonの導入・設定【Windows・Mac両対応】


ここをどう考えるかでしょうね。
今回は、pandasのインストールも必要です。
また、フォルダ名の指定も、敷居はやや高いかと。

ExcelマクロだとExcelだけで完結するメリットもあります。
Pythonを使えるようになれば、他の自動化(ブラウザ、異なるソフト間)もしやすいというメリットもあるでしょう。
迷ったら、ExcelマクロもPythonもどっちもやってみる、どっちも使えるようにしておくのがおすすめです。
複数のプログラミング言語を学ぶメリットも大きいので。

そういう意味では、「取得と変換」(Power Query)は、おすすめしません。
知っておいて損はありませんが。
コードを書くことをすっ飛ばすのは、効率化スキルを磨く上ではデメリットがあります。
考え方が古いかもしれませんが。
(マウスのクリックで手軽に操作できるようになったしっぺ返しは、確実にあります)

今回のコードもぜひ書いてみていただければ。

 



■編集後記
昨日は、セミナーに参加。

Xbox Series Xのエンダーリリィーズを日々プレイしていますが、ボス(ウルヴ)が倒せず……。
くじけそうです。
レベルを上げてもそうそう変わらず、パターンを見極めて、反射神経全開でいかないと。
昔のゲームっぽくて楽しいんですけどね。

1日1新Kindle『1日1新』Instagram『1日1新』
LUMIX BASE TOKYO
stand.fmをMacBook Airで収録→配信

■娘(4歳4ヶ月)日記→Kindle『娘日記』
ヨガをやっていると興味深く見に来ます。
つ、つらい……と言いながらやっていると、「飛ばそうか?」と。
早送りしてくれそうでした。
ライブなんでできないんですけど、気遣いはうれしいです。