【发布时间】:2018-04-22 01:23:44
【问题描述】:
我有一个带有时区感知索引的数据框
>>> dfn.index
Out[1]:
DatetimeIndex(['2004-01-02 01:00:00+11:00', '2004-01-02 02:00:00+11:00',
'2004-01-02 03:00:00+11:00', '2004-01-02 04:00:00+11:00',
'2004-01-02 21:00:00+11:00', '2004-01-02 22:00:00+11:00'],
dtype='datetime64[ns]', freq='H', tz='Australia/Sydney')
我把它保存在csv中,然后读取如下:
>>> dfn.to_csv('temp.csv')
>>> df= pd.read_csv('temp.csv', index_col=0 ,header=None )
>>> df.head()
Out[1]:
1
0
NaN 0.0000
2004-01-02 01:00:00+11:00 0.7519
2004-01-02 02:00:00+11:00 0.7520
2004-01-02 03:00:00+11:00 0.7515
2004-01-02 04:00:00+11:00 0.7502
索引被读取为字符串
>>> df.index[1]
Out[3]: '2004-01-02 01:00:00+11:00'
在转换 to_datetime 时,它会更改时间,因为它会将 +11 添加到小时
>>> df.index = pd.to_datetime(df.index)
>>> df.index[1]
Out[6]: Timestamp('2004-01-01 14:00:00')
我现在可以从索引中减去 11 小时来修复它,但是有没有更好的方法来处理这个问题?
我尝试使用答案 here 中的解决方案,但这会大大降低代码速度。
【问题讨论】:
-
df= pd.read_csv('temp.csv', index_col=0 ,header=None, parse_dates=[0] )呢? -
它还添加了+11
-
我测试了它,你是对的,日期默认转换为 UTC。所以如果不想使用
dateutil.parser.parse需要稍后转换。
标签: python pandas datetime timestamp-with-timezone