LoginSignup
2
3

More than 1 year has passed since last update.

PythonでCSVファイルを1つのExcelファイルにまとめる(pandas対xlwings)

Posted at

はじめに

計測のたびに出力される複数の計測結果の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
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3