はじめに
Pythonのpandasライブラリを使ってExcelファイルを書き出しを行おうとした時にエラーが発生しました。
今回はその時のエラーとその原因と対処方法についてです。
エラー&原因と対処方法
エラーメッセージ
まず発生したエラーですが
ValueError: Excel does not support datetimes with timezones.
Please ensure that datetimes are timezone unaware before writing to Excel.
というものでした。
エラーを訳すと
「値のエラー:エクセルはtimezonesのdatetimesをサポートしていません。
Excelに書き込む前に、datetimesがタイムゾーン(日本標準時)を認識しないことを確認してください。」
となります。
エクセルが日付のフォーマットを認識しないことによって生じるエラーのようです。
サンプルプログラムと対処方法
次にエラーが発生する短いサンプルプログラム(Pandasのデータをエクセルに書き出すだけ)です。
import pandas as pd
import datetime
import pytz
# タイムゾーンを含む日時データを作成
data = pd.DataFrame({
"date": [datetime.datetime.now(pytz.timezone("Asia/Tokyo"))]
})
# Excelファイルに書き出し
data.to_excel("output.xlsx")
このエラーは、Pythonのpandasライブラリを使ってExcelファイルを書き出す際に、時間帯情報(タイムゾーン)を含む日時データを書き出そうとしたとき(11行目)に発生します。
前述した通り、Excelはタイムゾーンを含む日時データの書き出しをサポートしていないのでエラーとなります。
次が修正したサンプルプログラムです。
import pandas as pd
import datetime
import pytz
# タイムゾーンを含む日時データを作成
data = pd.DataFrame({
"date": [datetime.datetime.now(pytz.timezone("Asia/Tokyo"))]
})
# タイムゾーン情報を削除
data['date'] = data['date'].apply(lambda x: x.replace(tzinfo=None))
# Excelファイルに書き出し
data.to_excel("output.xlsx")
修正版では、日時データからタイムゾーン情報を削除してからExcelファイルに書き出しています。
11行目のx.replace(tzinfo=None)により、日時データのタイムゾーン情報をNoneに置き換え(つまり削除)、タイムゾーン情報がない日時データを作成します。
こうする事でExcelがサポートしないタイムゾーンを含む日時データの書き出しを避けることができます。
さいごに
今回はExcelに書き出しを行う際に日付のフォーマットによって発生したエラーについてでした。
データサイエンス系だとPythonとPandasを使ってコーディングする事が多いと思います。
それ以外でも日付のフォーマットを使う事は多く、変換処理など不便なときもあります。
エクセルもまだまだ使うことが多いと思いますのでこの組み合わせの場合は注意が必要ですね。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。