Pandas DataFrame.to_excel 错误的日期时间
Posted
技术标签:
【中文标题】Pandas DataFrame.to_excel 错误的日期时间【英文标题】:Pandas DataFrame.to_excel wrong datetime 【发布时间】:2018-11-21 14:44:48 【问题描述】:鉴于此数据
import pandas as pd
dt1 = pd.Timestamp('2018-01-11 23:00:00')
dt2 = pd.Timestamp('2018-01-12 01:00:00')
ts = pd.date_range(dt1, dt2, freq='15Min', tz='Europe/Vienna')
values = list(range(ts.shape[0]))
df = pd.DataFrame(values, index=ts)
生成的df
的样子
0
2018-01-11 23:00:00+01:00 0
2018-01-11 23:15:00+01:00 1
2018-01-11 23:30:00+01:00 2
2018-01-11 23:45:00+01:00 3
2018-01-12 00:00:00+01:00 4
2018-01-12 00:15:00+01:00 5
2018-01-12 00:30:00+01:00 6
2018-01-12 00:45:00+01:00 7
2018-01-12 01:00:00+01:00 8
在做
df.to_excel('test.xlsx')
在 Excel 2013 中导致以下内容
2018-01-11 22:00:00 0
2018-01-11 22:15:00 1
2018-01-11 22:30:00 2
2018-01-11 22:45:00 3
2018-01-12 23:00:00 4
2018-01-12 23:15:00 5
2018-01-12 23:30:00 6
2018-01-12 23:45:00 7
2018-01-12 00:00:00 8
也就是说,日期时间显示为 UTC,但在当地时间午夜,日期是错误的,即 2018-01-12 23:00:00
,而它应该是 2018-01-11 23:00:00
。现在使用 Excel 可能会有干扰的语言设置和显示选项,但也许我的 Pandas 使用已经错了?
操作系统语言设置为美国英语,没有 Excel 特定设置。熊猫版本是0.23.0
,Python 3.6
【问题讨论】:
【参考方案1】:Excel 不支持日期时间中的时区。将日期时间/时间对象中的 tzinfo 设置为 None 或使用 'remove_timezone'
ts = pd.date_range(dt1, dt2, freq='15Min')
【讨论】:
【参考方案2】:我收到此错误(带有完整的回溯):
您是如何通过代码获得一些东西的?这是我用的:
import pandas as pd
dt1 = pd.Timestamp('2018-01-11 23:00:00')
dt2 = pd.Timestamp('2018-01-12 01:00:00')
ts = pd.date_range(dt1, dt2, freq='15Min', tz='Europe/Vienna')
values = list(range(ts.shape[0]))
df = pd.DataFrame(values, index=ts)
df.to_excel('test.xlsx')
print ("ready")
如果我删除 , tz='Europe/Vienna'
那么它工作得很好:
在 Python 中我得到了相同的结果,使用 print (df)
:
【讨论】:
你的 openpyxl 版本是什么?或者你的异常是在 Pandas 中抛出的?完整的追溯 FTW @phaebz - 我该如何检查? 导入openpyxl; openpyxl.__version__ 如果你能提供异常的完整回溯也很好 啊,所以你使用的是 xlsxwriter 包,而我使用的是 openpyxl 包,它似乎对这个问题保持沉默。以上是关于Pandas DataFrame.to_excel 错误的日期时间的主要内容,如果未能解决你的问题,请参考以下文章
pandas - DataFrame 写入同一张excel表