KeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> при сохранении кадра данных в Excel - PullRequest
0 голосов
/ 04 сентября 2018

Доброе утро, Я использую Python около полутора лет, и я нахожусь перед основной проблемой, которую я не могу решить.

У меня есть простой фрейм данных (df), не большой (около 12 тыс. Строк и 10 столбцов), который включает в себя один столбец формата «datetime64 [ns]», один «float64», а все остальные являются «объектами». Я отладил и могу сказать, что ошибка происходит из столбца datetime.

Когда я сохраняю этот файл в Excel, я получаю следующее сообщение:

Файл "test.py", строка 16, в test.to_excel (Writer, 'test') Файл "C: \ Users \ renaud.viot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pandas \ core \ frame.py", строка 1766, в to_excel engine = engine) Файл "C: \ Users \ renaud.viot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pandas \ io \ format \ excel.py", строка 652, в записи freeze_panes = freeze_panes) Файл "C: \ Users \ renaud.viot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pandas \ io \ excel.py", строка 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 (значение) Файл "C: \ Users \ renaud.viot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ openpyxl \ cell \ cell.py", строка 193, в _bind_value self._set_time_format (значение) Файл "C: \ Users \ renaud.viot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ openpyxl \ cell \ cell.py", строка 277, в _set_time_format self.number_format = fmts [тип (значение)] 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, Renaud

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

У меня была такая же проблема с пандами 0.23.4 и openpyxl 2.5.6. Я обновил (используя conda update openpyxl) до 2.5.8, и проблема ушла.

0 голосов
/ 05 сентября 2018

У меня была такая же проблема в моем проекте. Я не мог понять, почему происходит эта ошибка, но я нашел решение.

Я считаю, что эта ошибка связана с модулем 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 и после этого выполните свой код.

Это тоже должно решить твою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...