知人が実験データを結合させる際に苦労していたため、ネットに落ちている情報を頼りに作成した。
#csvファイルのファイル名
以下のようにtest
ディレクトリに数字3桁_数字2桁.csv
というファイル名で格納されていることを条件に作成した。
./test
123_01.csv
123_02.csv
123_03.csv
124_01.csv
124_02.csv
125_01.csv
#ソースコード
Marge_csv.py
import pandas as pd
import glob
import copy
# パスで指定したファイルの一覧を名前順にリスト形式で取得
csv_files = sorted(glob.glob('test/*.csv'))
for i in csv_files:#対象のファイルを一覧で表示
print(i)
csv_files_copy = copy.deepcopy(csv_files)#csv_files_copyにcsv_filesをコピー
while len(csv_files_copy):#csv_files_copyが空になるまでループ
data_list = []#csvファイルの中身を追加していくリストを用意
data_list.append(pd.read_csv(csv_files_copy[0]))
parent_file = []
parent_file = csv_files_copy.pop(0)#csv_files_copyの先頭を削除しつつ親ファイルリストに格納
for file in csv_files_copy:
child_file = []
child_file = file#親ファイルと比較するファイルの名前を子ファイルリストに格納
if parent_file[-6:] == child_file[-6:]:#二つのファイルの"下二桁.csv"が同じ
data_list.append(pd.read_csv(file))#data_listに追加
csv_files_copy.remove(file)#csv_files_copyから削除
#リストを全て行方向に結合
#axis=0:行方向に結合, sort
df = pd.concat(data_list, axis=0, sort=True)
output = "test/total" + parent_file[-6:]
df.to_csv(output,index=False)#fファイル名"taotal下二桁.csv"で出力する
#終わりに
空いている時間で雑に書いたため問題を指摘されたときにその都度修正します。