使用pandas转换字符串时间戳

4 投票
1 回答
15069 浏览
提问于 2025-04-20 02:29

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

这是一个正确的转换,UTC 偏移量被正确捕获,反映在时间戳对象中:

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 个回答

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

撰写回答