使用pandas转换字符串时间戳

时间:2014-09-05 21:02:04

标签: python datetime pandas

我一直在尝试使用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日期时间字符串,但似乎忽略了-0500的UTC偏移量:

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 个答案:

答案 0 :(得分:2)

使用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>)