web-dev-qa-db-ja.com

KeyError:<class'pandas._libs.tslibs.timestamps.Timestamp '>データフレームをExcelに保存するとき

おはようございます、私はpythonを約1年半使用していますが、解決できない基本的な問題の前にいることに気づきました。

「datetime64 [ns]」形式の1つの列、「float64」、その他すべてが「オブジェクト」である、大きくない単純なデータフレーム(df)(約12,000行10列)があります。 デバッグしたところ、エラーは日時列から発生していると言えます。

このdfをExcelに保存すると、次のメッセージが表示されます。

Test.to_Excel(writer、 'test')ファイル "C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas \の16行目のファイル" test.py " core\frame.py "、1766行目、to_Excel engine = engine)ファイル" C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\formats\Excel .py "、652行目、書き込みでfreeze_panes = freeze_panes)ファイル" C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\Excel.py "、line 1395、write_cells xcell.value、fmt = self._value_with_fmt(cell.val)ファイル "C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell .py "、行291、値self._bind_value(value)ファイル" C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py " 、193行目、_bind_value self._set_time_format(value)ファイル "C:\ Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py"、277行目、_set_time_format self.nu mber_format = fmts [type(value)] KeyError:

私が使用しているコードは次のとおりです。

import pandas as pd
import datetime
from pandas import ExcelWriter

test = pd.read_Excel("test_in.xlsx")
test["CaseDate"] = pd.to_datetime(test["CaseDate"])
writer = ExcelWriter("test_out.xlsx")
test.to_Excel(writer,'test')
writer.save()

以下のデータのサンプルを参照してください。

>    A   CaseDate 
> 0  A 2018-08-30 
> 1  A 2018-08-30 
> 2  A 2018-08-30 
> 3  A 2018-08-30 
> 4  A 2018-08-30 
> 5  A 2018-08-30 
> 6  A 2018-08-30 
> 7  A 2018-08-30 
> 8  A 2018-08-30 
> 9  A 2018-08-30

明らかなことがあるに違いありません...ご協力ありがとうございます。 BR、ルノー

6
rvaux

私のプロジェクトでも同じ問題が発生していました。このエラーが発生している理由を理解できませんでしたが、解決策を見つけました。

このエラーはモジュールopenpyxlに関連していると思います。 Pandasは、データをExcelファイルとしてエクスポートするためのエンジンとして使用されます。ファイルに.xlsx拡張子を付けると、自動的にクラスExcelWritterに名前が付けられます。デフォルトのエンジンとしてopenpyxlを使用します。

私がやったことは、このエンジンを変更することです。新しいエンジン(ExcelWritter)を呼び出すxlsxwriterにパラメーターを渡して、データフレームをエクスポートできます。

だから私のコードはから変更されました:

writer = pd.ExcelWriter('output.xlsx')
df.to_Excel(writer, 'data')
writer.save()

これに:

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
df.to_Excel(writer, sheet_name='data')
writer.save()

モジュールxlsxwriterが環境にインストールされていない場合は、pip install xlsxwriterを使用してから、コードを実行してください。

それはあなたの問題も解決するはずです。

7
Arnold Souza

pandas 0.23.4およびopenpyxl2.5.6でも同じ問題が発生しました。(condaupdate openpyxlを使用して)2.5.8に更新すると、問題は解決しました。

2
Mike Gleen