将datetime64系列设置为pandas dataframe index会自动添加时区偏移量

时间:2016-11-29 12:00:46

标签: python csv pandas timezone

我正在阅读没有时区数据的日期时间的csv,但是一旦我使用datetime列作为索引,就会添加一个(n个不正确的)时区偏移量。我怎样才能防止这种情况发生?

数据:

Time (UTC),Open,High,Low,Close,Volume 
2005.01.03 00:00:00,1.8275,1.858,1.7971,1.819,41998.5
2005.01.10 00:00:00,1.8095,1.8376,1.771,1.766,46353.9

这是每周的OHLC数据。

import pandas as pd
df = pd.read_csv("test.csv", parse_dates=["Time (UTC)"])

读入数据后,没有时区偏移:

in:
df["Time (UTC)"].head(2)
out:
0   1973-02-26
1   1973-03-05
Name: Time (UTC), dtype: datetime64[ns]

但是当我将此数据设置为索引时,会添加时区偏移量:

in:
df.index = df["Time (UTC)"]
df.index.values[:1]
out:
array(['1973-02-26T01:00:00.000000000+0100'], dtype='datetime64[ns]')

使用df.index,我回到dtype='datetime64[ns]',所以即使添加了时区偏移也没有添加时区(顺便说一下,这也似乎有夏季)。如果我使用df = df.tz_localize("UTC")将时区设置为UTC,df.index会显示dtype = 'datetime64[ns, UTC]'。但是,它对偏移没有影响。

由于我知道数据的时区,我不需要时区偏移,更不用说可能基于我的机器时区的错误了。 出于性能原因,我宁愿将[“Time(UTC)”]列设置为使用pd.read_csv的索引,但在执行此操作时我会得到相同的行为。

如何防止添加时区偏移或设置正确的时区偏移?

我的python版本是2.7.11(Anaconda 2.5.0 64位),pandas版本是0.17.1,numpy 1.10.4。

1 个答案:

答案 0 :(得分:3)

这只是一个显示问题 - 您的日期仍然是时区的,只是numpy在repr中显示偏移量。

如果您升级到更新的numpy(1.11 +),它将解决显示问题。

In [31]: np.__version__
Out[31]: '1.11.1'

In [32]: df.index.values[:1]
Out[32]: array(['2005-01-03T00:00:00.000000000'], dtype='datetime64[ns]')