webentwicklung-frage-antwort-db.com.de

KeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> beim Speichern eines Datenrahmens in Excel

Guten Morgen, ... Ich benutze Python seit ungefähr anderthalb Jahren und sehe mich vor einem grundlegenden Problem, das ich nicht lösen kann. 

Ich habe ein einfaches Dataframe (df), nicht groß (etwa 12.000 Zeilen und 10 Spalten), das eine Spalte enthält, die das Format "datetime64 [ns]" hat, ein "float64" und alle anderen sind "object". Ich debuggen und kann sagen, dass der Fehler aus der Datetime-Spalte stammt.

Wenn ich dieses Dokument in Excel speichere, erhalte ich die folgende Meldung:

Datei "test.py", Zeile 16 in test.to_Excel (Writer, 'test') Datei "C:\Benutzer\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\frame.py", Zeile 1766 in to_Excel engine = engine) Datei "C:\Benutzer\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\formate\Excel.py", Zeile 652, schreiben freeze_panes = freeze_panes) Datei "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\Excel.py", Zeile 1395, in write_cells xcell.value, fmt = self._value_with_fmt (cell.val) Datei "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", Zeile 291 in Wert self._bind_value (value) Datei "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", Zeile 193 in _bind_value self._set_time_format (value) Datei "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", Zeile 277 in _set_time_format self.number_format = fmts [Typ (Wert)] KeyError: 

Der Code, den ich verwende, ist folgender:

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()

Bitte sehen Sie unten das Beispiel der Daten:

>    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

Es muss etwas offensichtlich sein ... Danke für Ihre Hilfe . BR, Renaud

6
rvaux

Ich hatte das gleiche Problem in meinem Projekt. Ich konnte nicht verstehen, warum dieser Fehler auftritt, aber ich habe eine Lösung gefunden. 

Ich glaube, dass dieser Fehler mit dem Modul openpyxl zusammenhängt. Es wird von Pandas als Engine zum Exportieren der Daten als Excel-Datei verwendet. Wenn Sie die Datei mit der Erweiterung .xlsx benennen, verwendet die Klasse ExcelWritter automatisch openpyxl als Standardmodul.

Was ich getan habe, ist diesen Motor zu ändern. Sie können einen Parameter an ExcelWritter übergeben, indem Sie eine neue Engine (xlsxwriter) aufrufen, um den Datenrahmen zu exportieren. 

Mein Code hat sich also geändert von:

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

zu diesem:

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

Wenn Sie das Modul xlsxwriter nicht in Ihrer Umgebung installiert haben, verwenden Sie einfach pip install xlsxwriter und führen Sie anschließend Ihren Code aus.

Das sollte auch Ihr Problem lösen. 

6
Arnold Souza

Ich hatte das gleiche Problem mit Pandas 0.23.4 und Openpyxl 2.5.6. Ich habe (mit conda update openpyxl) ein Update auf 2.5.8 durchgeführt und das Problem wurde behoben.

1
Mike Gleen