以前動いていたopenpyxlでの出力コードが動かなくなっていたので、その修正の紹介、ならびに備忘録となります。この記事を読むことでPythonで利用するdataframeなどをエクセル(Excel)ファイルやCSVファイルに出力できるようになります。
目標・この記事を書いたわけ
Pythonのdataframeなどをエクセル(Excel)ファイルやCSVファイルに出力します。
以前のopenpyxl=3.0.3では動いていたコードがopenpyxl=3.0.10では

といったZip fileのエラーで動かなくなっていたので、動くようにすることが目的です。
使用するツール
使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。
実際のコードとやっていること
こんかいはダミーデータを作って、そのdataframeデータをエクセル(Excel)ファイルやCSVファイルに出力するものとします。
ダミーデータ作成についてはこちらの記事の前半を利用します。
約8500行のデータを作成することになります。以下はそのコードになります。
import pandas as pd
import numpy as np
import datetime
start_date = datetime.date(1990,1,1)
end=datetime.date.today()
date_df = pd.DataFrame(pd.date_range(start_date, end, freq='B').date, columns=['date'])
date_df["value"]=np.nan
display(date_df.head().append(date_df.tail(10)))

import random
%%time
for i in range(len(date_df)):
date_df.loc[i,"value"]=random.randint(0,len(date_df))
display(date_df.head().append(date_df.tail(10)))

今回はここで作成したダミーデータ data_df をエクセル(Excel)ファイルやCSVファイルに出力します。
エクセル(Excel)ファイルへの出力
コードは以下のようになります。
import openpyxl
print(openpyxl.__version__)
with pd.ExcelWriter("Excelout.xlsx") as writer:
date_df.to_excel(writer)

上記コードを実行させるとopenpyxl のバージョンが3.0.10であることが分かりますし、Excelout.xlsxというファイルに先ほどのdata_dfというデータテーブルが出力されることになります。

ディレクトリ構造の確認(赤矢印)とファイルの確認(青矢印)を見ていただくと新規にファイルが作成されていることが分かります。
ダブルクリックしてそのファイルを自身のPC上にダウンロードし、エクセルで開くと以下のようなファイルが取得できることが分かります。

エクセル(Excel)ファイルから入力
コードは以下の通りです。
input_file_name = './Excelout.xlsx'
input_book = pd.ExcelFile(input_file_name)
input_sheet_name = input_book.sheet_names
input_sheet_df = input_book.parse(input_sheet_name[0]).dropna()
display(input_sheet_df)

CSVファイルへの出力
print(pd.__version__)
filename="./CSVout.csv"
date_df.to_csv(filename, encoding="utf-8-sig", header=True)

CSVファイルが作成されていることが分かると思います。ダブルクリックで右のエリアに内容を表示させることもできます。

ファイルを選んで右クリックでダウンロードすることもできます。

また、ファイルが表示されないときなど、何もないところで右クリックすることでディレクトリ内の情報を最新の物に更新(Refresh)することもできます。

CSVファイルからの入力
コードは以下の通りです。
df_csv_input = pd.read_csv("./CSVout.csv")
display(df_csv_input)

この記事が皆さんのお役に立てば幸いです。
—
Pythonに関する記事をご紹介します。
コメント