【问题标题】:Using pandas to convert string timestamps使用 pandas 转换字符串时间戳
【发布时间】:2014-10-30 21:10:51
【问题描述】:

我一直在尝试使用 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

【问题讨论】:

    标签: python datetime pandas


    【解决方案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>)
    

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2022-01-21
      • 2019-03-14
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多