python - key 错误 : <class 'pandas._libs.tslibs.timestamps.Timestamp' > when saving dataframe to excel

标签 python excel python-3.x pandas dataframe

早上好, 我已经使用 python 大约一年半了,我发现自己面临着一个我无法解决的基本问题。

我有一个简单的数据框 (df),不大(大约 12k 行和 10 列),其中包括一列是“datetime64[ns]”格式,一列是“float64”,其他都是“对象”。 我调试了,可以说错误来自 datetime 列。

当我将此 df 保存到 Excel 时,我收到以下消息:

File "test.py", line 16, in test.to_excel(writer,'test') File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\frame.py", line 1766, in to_excel engine=engine) File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\formats\excel.py", line 652, in write freeze_panes=freeze_panes) File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\excel.py", line 1395, in write_cells xcell.value, fmt = self._value_with_fmt(cell.val) File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", line 291, in value self._bind_value(value) File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", line 193, in _bind_value self._set_time_format(value) File "C:\Users\renaud.viot\AppData\Local\Programs\Python\Python36\lib\site-packages\openpyxl\cell\cell.py", line 277, in _set_time_format self.number_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, 雷诺

最佳答案

我在我的项目中遇到了同样的问题。我不明白为什么会发生此错误,但我找到了解决方案。

我相信这个错误与模块 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 然后执行您的代码。

那也应该可以解决您的问题。

关于python - key 错误 : <class 'pandas._libs.tslibs.timestamps.Timestamp' > when saving dataframe to excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52166860/

相关文章:

python - 如何在 tensorflow 2.0 中使用预制的密集层进行训练?

arrays - Excel 自动筛选条件数组循环

python - 使用 pysftp 连接到 SFTP 服务器时出现 "Failed to load HostKeys"警告

在使用标准输入的程序中使用行版的 Python 调试器

python - 如何测试列表是否具有相同的元素

python - 如何按方括号之间的内容进行数字排序

excel - 在 MS Excel 中自动对字段进行排序

Excel 计数值出现在列中的次数(如果该行唯一)

python - 优雅而高效的方式按原样保留日期值,而不会出现 OOB 错误

javascript - 投票功能 "No Eintrag matches the given query"