なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Pythonサンプルコード】複数のエクセルファイルを1つにまとめる方法

f:id:karupoimou:20200222015751p:plain:w400
複数のエクセルファイルを1つにまとめる
Pythonのpandasを用いて列名が同じ別々のエクセルファイルを一つにまとめる方法をご紹介します

今回扱うファイル

今回扱うファイルは同じ列名のカラムにそれぞれ別の行データが入ったものとなっています。

DBのレコードによくあるこの様なデータです。

f:id:karupoimou:20200222012337p:plain:w400
複数のファイル

f:id:karupoimou:20200222012454p:plain:w400
note_hashtag_2020_02_22_1.xlsx

f:id:karupoimou:20200222012619p:plain:w400
note_hashtag_2020_02_22_2.xlsx

サンプルコード

import numpy as np 
import pandas as pd
import glob

# ファイルリスト取得
file_list=glob.glob("レコード/*.xlsx")

# pandasのデータフレーム化
df = pd.DataFrame()

for file in file_list:
    df2 = pd.read_excel(file, parse_dates=True,index_col=0)
    df2 = df2.replace(np.nan,' ', regex=True)
    df = pd.concat([df, df2])

# 一つにまとめたエクセルファイルを保存
df.to_excel('note_hashtag_2020_02_22_all.xlsx')
コードの説明

file_list=glob.glob("レコード/*.xlsx")

ここでは「レコード」フォルダの中に入っている「.xlsx」のファイルリストを取得しています

f:id:karupoimou:20200222013914p:plain:w400
ファイル構成
f:id:karupoimou:20200222013955p:plain:w400
ファイル構成2

df = pd.DataFrame()

まず空のデータフレームを作成し、これにそれぞれの.xlsxファイルの内容をどんどん追加していきます。

df2 = pd.read_excel(file, parse_dates=True,index_col=0)

ここではpd.read_excel()関数を使ってエクセルファイルを読み込んでいます。
※なおCSVを読み込みたい場合は代わりに「pd.read_csv()関数」を使うとよいです

df2 = df2.replace(np.nan,' ', regex=True)

読み込んだ.xlsxに欠損値が合った場合に欠損値を埋める処理を行っています

df = pd.concat([df, df2])

ここでは pd.concat()関数を使ってデータフレームを結合しています

df.to_excel('note_hashtag_2020_02_22_all.xlsx')

最後に一つにまとめたエクセルファイルを保存して完了です

ファイル名を列として追加する場合
import numpy as np 
import pandas as pd
import glob

# ファイルリスト取得
file_list=glob.glob("レコード/*.xlsx")

# pandasのデータフレーム化
df = pd.DataFrame()

for file in file_list:
    df2 = pd.read_excel(file, parse_dates=True,index_col=0)
    df2 = df2.replace(np.nan,' ', regex=True)
    df2["file_name"] = file
    df = pd.concat([df, df2])

df.to_excel('note_hashtag_2020_02_22_all.xlsx')

f:id:karupoimou:20200222015013p:plain:w400
ファイル名を列として追加

df2["file_name"] = file

この部分で列を足しています

参考ページ

note.nkmk.me