CSVファイルの行と列の入れ替えはpandasやnumpyでもできますが、今回はCSVモジュールでやってみました。
読み込んだ行データを列毎に分割、リスト化して行データにする手法です。そのようなメソッドがないため手作りするしかありません。
pandasでは列インデックスや行インデックスについても考慮しなければならないので、CSVモジュールの方が私には楽です。
コード例
各馬のデータを年毎にまとめる。
import glob
import csv
# 1986年から2020年のhorseファイルを年毎にまとめる
for year in range(1986,2021):
for f in glob.glob(f'/horse_racing/horse_mas/{year}/*/*.csv'):
file_new = f.split('horse_mas/')[0] + 'horse/' + f'horse{year}' + '.csv'
with open (f, mode="r", encoding="shift_jis") as f1:
with open(file_new, mode="a", encoding="shift_jis") as f2:
writer = csv.writer(f2)
row1_pre = []
row2_pre = []
for row in csv.reader(f1):
row1_pre.append(row[0])
row2_pre.append(row[1])
row1 = ['horseID'] + row1_pre # 列タイトル
row2 = [f[-13:-4]] + row2_pre # 馬データ
if f[-9:-4] == '00001': # 各年1番の馬には列タイトルをつける
writer.writerow(row1[0:15])
writer.writerow(row2[0:15])
else:
writer.writerow(row2[0:15])