pd.to_excelで困った...
現在株価の分析を行っているのですが、その際dataframeを使用しています。しかし、様々な条件で分析を行った後、他人に説明などを行う場合Excelファイルとして保存しておくのが良いと思いました。しかし、pandasのto_excelを用いようとすると、新たにデータを書き込みたい場合上書きされてしまいます。これは困った...
そこでいろいろ調べていくとopenpyxlと組み合わせるとなんとか上書きされずに保存できることがわかりました。そこで備忘録としてそのコードを残しておきたいと思います。
使用したパッケージなどのバージョンは以下の通りです。
Python 3.7
Pandas 0.25.1
openpyxl 3.0.0
excelへの保存
新規のワークブック、ワークシートに保存する
この場合はpandasのto_excelを使いましょう。
import pandas as pd
with pd.ExcelWriter(file_path) as writer:
df.to_excel(writer, sheet_name=sheet_name)
##既存のワークブック、ワークシートに上書きする
この場合はopenpyxlを使って、上書きしましょう。
import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
wb = openpyxl.load_workbook(file_path)
ws = wb[sheet_name]
for i, row in enumerate(dataframe_to_rows(df, header=False)):
if i == 0:
continue
ws.append(row)
wb.save(file_path)
##既存のワークブックに新規のシートとして保存する
この部分がこの記事での肝の部分で、調べまくったところです...
import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
wb = openpyxl.load_workbook(file_path)
ws = wb.create_sheet(title=sheet_name)
ws.append(['Date', 'Open', 'Close', 'High', 'Low'])
for i, row in enumerate(dataframe_to_rows(df, header=False)):
if i == 0:
continue
ws.append(row)
wb.save(file_path)
後半は既存のワークブック、ワークシートに保存する場合と同じです。
#まとめ
以上がそれぞれの書き方です。
僕自身は2番目と3番目はtry-exceptで書きましたが、たぶんif文でのわかりやすい分け方もあるのかな〜と...
また新しいやり方が見つかったら追記なり、新しい記事で書き込みたいと思います!
では!