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表

Python openpyxlpandas操作Excel方法简介与具体实例

Pandas基础

pandas报错:KeyError:

Pandas介绍

python pandas怎么用