python - 使用 pandas 转换字符串时间戳

标签 python datetime pandas

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

这是一个正确的转换,UTC 偏移量被正确捕获,反射(reflect)在 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

最佳答案

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

关于python - 使用 pandas 转换字符串时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25693930/

相关文章:

python - 使用 Python 将值分解为唯一行

python - 根据另一列 pandas 的 300 个相邻行中的值创建新列

python - 如何在 Python 中使用 XSL 样式表将 XML 转换为 HTML?

python - cv2.imshow 和 numpy.dstack 核心转储

python - 以列表年和月的形式获取日期之间的差异

php - 将 ISO 日期转换为 Unix 时间戳的最有效方法?

python - 其他专栏的 Pandas filldown(我不知道如何命名)

python - TF 中的索引操作

python - 从Python文件中读取多行

file - 需要 bash 脚本来查找(如果存在)小于 7 天的 tar 文件