はじめに
計測のたびに出力される複数の計測結果のCSVファイルを、とりあえずExcelのブックにまとめたい気持ちになりました。パッとできないかなとおもったけど、pandasかxlwingsかどっちでやればいいのか悩んだので記録用にメモ。
前提
CSVファイルのサイズは以下の通り。
(30730, 7),4375KB
(84240, 6),8739KB
(41550, 9),6245KB
Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz 2.71 GHz
pandasのExcelWriterを使う方法
ExcelWriterを使って複数シートに記録してみる
filelist=["output.csv","output1.csv","output2.csv"]
filepath=[pathlib.Path(f) for f in filelist]
with pd.ExcelWriter('output.xlsx') as writer:
for f in filepath:
print(f)
df=pd.read_csv(f,delimiter="\t")
df.to_excel(writer, sheet_name=f.stem)
print("savingExcel...")
#%%
#CPU times: total: 1min 14s
#Wall time: 1min 24s
「pandasのexcel操作は遅い」と聞いていましたが、いくらなんでもさすがに遅すぎでは…?
xlwingsでブックを立ち上げて記録
さすがに待てないのでxlwingsで使ってみる
with xlwings.App(visible=False) as app:
with xlwings.Book() as wb:
for f in filepath:
df=pd.read_csv(f,delimiter="\t")
wb.sheets.add(f.stem)
wb.sheets[f.stem].range(1,1).value=df
wb.save("output.xlsx")
# %%
# CPU times: total: 5.39 s
# Wall time: 21.7 s
これならまぁ我慢できる
おわりに
xlwingsは、たまにしか使わないけどたまに使いたくなるので、使い方を忘れる。
補足
dfがyyyy/mm/dd hh:mm:ss
形式だと、自動でExcel上で日付型として読み込みやがります。やめてほしい。
そのままExcel上で編集したければ、with句使わずに開いたままにする。
Excel上で、貼り付けたデータが選択状態になっているので、そのままAlt→N→Vでピボットテーブルするといいかんじ。
wb=xlwings.Book()
wb.sheets(1).range(1,1).value=df
xlwings.Range("B1").expand().select