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:test.to_excel('test_out.xlsx', 'test')
谢谢拉斐尔 - 我仍然有同样的错误。 KeyError: 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 时的主要内容,如果未能解决你的问题,请参考以下文章