当我使用pandas read_csv读取具有时区识别日期时间的列(并将该列指定为索引)时,pandas将其转换为时区天真utc DatetimeIndex。
Test.csv中的数据:
DateTime,Temperature 2016-07-01T11:05:07+02:00,21.125 2016-07-01T11:05:09+02:00,21.138 2016-07-01T11:05:10+02:00,21.156 2016-07-01T11:05:11+02:00,21.179 2016-07-01T11:05:12+02:00,21.198 2016-07-01T11:05:13+02:00,21.206 2016-07-01T11:05:14+02:00,21.225 2016-07-01T11:05:15+02:00,21.233
从csv读取的代码:
In [1]: import pandas as pd
In [2]: df = pd.read_csv('Test.csv', index_col=0, parse_dates=True)
这将产生一个表示时区天真utc时间的索引:
In [3]: df.index
Out[3]: DatetimeIndex(['2016-07-01 09:05:07', '2016-07-01 09:05:09',
'2016-07-01 09:05:10', '2016-07-01 09:05:11',
'2016-07-01 09:05:12', '2016-07-01 09:05:13',
'2016-07-01 09:05:14', '2016-07-01 09:05:15'],
dtype='datetime64[ns]', name='DateTime', freq=None)
我尝试使用date_parser函数:
In [4]: date_parser = lambda x: pd.to_datetime(x).tz_localize(None)
In [5]: df = pd.read_csv('Test.csv', index_col=0, parse_dates=True, date_parser=date_parser)
这给出了相同的结果。
我怎样才能使read_csv创建一个DatetimeIndex,该DatetimeIndex是时区幼稚的并代表本地时间而不是utc时间?
我正在使用熊猫0.18.1。
亚历克斯(Alex)的答案导致了时区感知的DatetimeIndex。如OP所要求,要获取时区朴素的本地DatetimeIndex,请dateutil.parser.parser
通过设置来通知忽略时区信息ignoretz=True
:
import dateutil
date_parser = lambda x: dateutil.parser.parse(x, ignoretz=True)
df = pd.read_csv('Test.csv', index_col=0, parse_dates=True, date_parser=date_parser)
print(df)
输出
Temperature
DateTime
2016-07-01 11:05:07 21.125
2016-07-01 11:05:09 21.138
2016-07-01 11:05:10 21.156
2016-07-01 11:05:11 21.179
2016-07-01 11:05:12 21.198
2016-07-01 11:05:13 21.206
2016-07-01 11:05:14 21.225
2016-07-01 11:05:15 21.233
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句