Pandas DataFrame.to_excel错误的日期时间

时间:2018-06-12 08:59:02

标签: python excel pandas datetime timezone

鉴于此数据

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用法已经错了?

OS语言设置为美国英语,没有Excel特定设置。 Pandas版本为0.23.0,Python 3.6

2 个答案:

答案 0 :(得分:1)

Excel在日期时间内不支持时区。将datetime / time对象中的tzinfo设置为None或使用' remove_timezone'

ts = pd.date_range(dt1, dt2, freq='15Min')

答案 1 :(得分:0)

我收到此错误(完全追溯):

enter image description here

您是如何设法获取代码的?这是我用过的:

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',那么它可以正常运行:

enter image description here

在Python中,我使用print (df)得到了相同的内容:

enter image description here