【问题标题】:Timestamp conversion failing to produce desired result时间戳转换未能产生预期结果
【发布时间】:2016-11-10 04:05:30
【问题描述】:

我有一个带有日期和时间列等的 pandas 数据框,我正在尝试将两列都转换为具有微秒精度的 Unix 时间戳,这样我就可以将数据框转储到numpy 内存映射文件(它需要浮点数,或者至少不需要日期对象,所以它是必不可少的)。

所以没有数据框,只使用字符串,我得到以下内容:

DT = '2014-10-01 00:00:07.082000'

UX= time.mktime(datetime.datetime.strptime(DT, '%Y-%m-%d %H:%M:%S.%f').timetuple())
print UX
>>> 1412118007.0

tm = datetime.datetime.fromtimestamp(UX)
print tm
>>>2014-10-01 00:00:07

那么我如何包含带有时间戳的微秒?

【问题讨论】:

    标签: python-2.7 datetime pandas time


    【解决方案1】:

    这样就可以了 =)

    from datetime import datetime
    
    
    DT = '2014-10-01 00:00:07.082000'
    
    UX = datetime.strptime(DT, '%Y-%m-%d %H:%M:%S.%f')
    
    print UX
    >>> 2014-10-01 00:00:07.082000
    

    【讨论】:

    • 这不是时间戳,而是一个日期时间对象,不能从 .npy 文件中存储和读取。
    【解决方案2】:

    您可以使用ns 精度转换为np.int64 用于unix 时间:

    df = pd.DataFrame({'A':['2014-10-01 00:00:07.082000', '2014-10-01 00:00:07.082000']})
    print (df)
                                A
    0  2014-10-01 00:00:07.082000
    1  2014-10-01 00:00:07.082000
    
    df['A'] = pd.to_datetime(df.A)
    
    df['B'] = df.A.astype(np.int64)
    df['C'] = pd.to_datetime(df.B, unit='ns')
    print (df)
                            A                    B                       C
    0 2014-10-01 00:00:07.082  1412121607082000000 2014-10-01 00:00:07.082
    1 2014-10-01 00:00:07.082  1412121607082000000 2014-10-01 00:00:07.082
    

    对于ms 精度使用:

    df['B'] = (df.A.astype(np.int64) // 10**6)
    df['C'] = pd.to_datetime(df.B, unit='ms')
    print (df)
                            A              B                       C
    0 2014-10-01 00:00:07.082  1412121607082 2014-10-01 00:00:07.082
    1 2014-10-01 00:00:07.082  1412121607082 2014-10-01 00:00:07.082
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多