KeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> 将数据框保存到 excel 时

Posted

技术标签:

【中文标题】KeyError: <class \'pandas._libs.tslibs.timestamps.Timestamp\'> 将数据框保存到 excel 时【英文标题】:KeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> when saving dataframe to excelKeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> 将数据框保存到 excel 时 【发布时间】:2019-02-09 12:29:54 【问题描述】:

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

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

当我将此 df 保存到 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 中 引擎=引擎)文件“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", 第 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.number_format = fmts[类型(值)] 关键错误:

我使用的代码如下:

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, 雷诺

【问题讨论】:

由于某种原因看不到最后一条错误:> KeyError: 。此外,我在上面尝试呈现的数据是 2 列 df,其中一列只有 A,被称为“A”,另一列有日期,被称为“CaseDate” 刚刚测试过,无法重现...但我只是test.to_excel('test_out.xlsx', 'test') 谢谢拉斐尔 - 我仍然有同样的错误。 KeyError: @RafaelC:您能告诉我您在“CaseDate”列中的任何元素的类别吗? 我使用了 print(type(test["CaseDate"][0]).__name__) 。 我得到以下信息:“时间戳”。 【参考方案1】:

我在使用 pandas 0.23.4 和 openpyxl 2.5.6 时遇到了同样的问题。我更新(使用 conda update openpyxl)到 2.5.8,问题就消失了。

【讨论】:

在将 pandas 从 0.19.2 更新到 0.24.2(已安装最新版本的 openpyxl)后离开了。【参考方案2】:

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

我认为此错误与模块 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,然后执行您的代码。

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

【讨论】:

嗨,阿诺德 - 谢谢。它也对我有用。这很奇怪,对我来说似乎很奇怪。我在同一环境中使用“正常”方式重新运行另一个登录,它工作......我很困惑,但感谢您的帮助! 嗨@rvaux,我正在使用 Pipenv 来控制我的环境,并且还有一个 Anaconda Python 解释器。我在我的环境中遇到了这个问题,当我尝试使用 Anaconda 解释器运行同一个项目时,一切都运行良好。这就是为什么我意识到问题出在运行 Openpyxl 所需的子包上。当我使用 pipenv install openpyxl 时,安装了 mais 模块,但缺少一些东西。所以我尝试了 xlsxwriter,一切正常。我做了和你一样的事,将我的脚本回滚到 openpyxl 并且它声明可以正常工作,因为安装了一些必要的子包。

以上是关于KeyError: <class 'pandas._libs.tslibs.timestamps.Timestamp'> 将数据框保存到 excel 时的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch Parallel KeyError Bug

Pytorch Parallel KeyError Bug

Pytorch Parallel KeyError Bug

panding不会撑开盒子的情况

带有索引的 scikit-learn StratifiedShuffleSplit KeyError

KeyError: 'chair'