使用pandas将字符串时间戳转换

4

我一直在尝试使用 pandas.to_datetime 在我的代码中转换时间戳格式,但是当提供字符串输入时,pandas 有时似乎不能正确提取UTC偏移量:

以下是正确的转换,UTC偏移量已正确捕获,如Timestamp对象所反映:

In[76]: pd.to_datetime('2014-04-09T15:29:59.999993-0500', utc=True)
Out[76]: Timestamp('2014-04-09 20:29:59.999993+0000', tz='UTC')

这里有一种备用的字符串表示方法,仍然是一个有效的ISO 8601日期时间字符串,但UTC偏移量-0500似乎被忽略了。
In[77]: pd.to_datetime('2014-04-09T152959.999993-0500', utc=True)
Out[77]: Timestamp('2014-04-09 15:29:59.999993+0000', tz='UTC')

另一方面,dateutil 软件包可以很好地处理这些问题:
In[78]: dateutil.parser.parse('2014-04-09T152959.999993-0500')
Out[78]: datetime.datetime(2014, 4, 9, 15, 29, 59, 999993, tzinfo=tzoffset(None, -18000))

我当然可以使用dateutil,但是为什么pandas.to_datetime不能正确处理不同的ISO日期时间字符串呢?这里有什么问题吗?

使用Python 2.7.6和pandas 0.13.1

1个回答

6
使用 pandas 0.14.0:两个对 pd.to_datetime 的调用都返回正确的、带有时区信息的时间戳:
In [72]: pd.__version__
Out[72]: '0.14.0'

In [69]: pd.to_datetime('2014-04-09T152959.999993-0500', utc=True)
Out[69]: Timestamp('2014-04-09 20:29:59.999993+0000', tz='UTC')

In [70]: pd.to_datetime('2014-04-09T15:29:59.999993-0500', utc=True)
Out[70]: Timestamp('2014-04-09 20:29:59.999993+0000', tz='UTC')

In [71]: dateutil.parser.parse('2014-04-09T152959.999993-0500').astimezone(pytz.utc)
Out[71]: datetime.datetime(2014, 4, 9, 20, 29, 59, 999993, tzinfo=<UTC>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接