【问题标题】:Pandas to_datetime produces inconsistent dates熊猫 to_datetime 产生不一致的日期
【发布时间】:2013-10-22 23:35:21
【问题描述】:

to_datetime 似乎产生不同的基准日期 (pandas-0.12.0)

pd.to_datetime('03:00:00.017158433')
Timestamp('2013-10-22 03:00:00.017158', tz=None)

pd.to_datetime(10800017158433, unit='ns')
Timestamp('1970-01-01 03:00:00.017158433', tz=None)

这是一个错误吗?还是使用有问题?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    它是正确的,但它从纪元开始以纳秒为单位(例如 19700101 00:00:00)

    In [3]: pd.to_datetime('03:00:00.017158433')
    Out[3]: Timestamp('2013-10-22 03:00:00.017158', tz=None)
    
    In [4]: pd.to_datetime('03:00:00.017158433').value
    Out[4]: 1382410800017158000
    
    In [5]: pd.to_datetime(1382410800017158000,unit='ns')
    Out[5]: Timestamp('2013-10-22 03:00:00.017158', tz=None)
    

    10800017158433从哪里来

    它不是一个有效的纪元时间戳(它是,但它可能不是你想要的)

    你说这是从午夜开始的,所以你可以这样做。

    In [2]: Timestamp(Timestamp('20131022').value+10800017158433)
    Out[2]: Timestamp('2013-10-22 03:00:00.017158433', tz=None)
    

    【讨论】:

    • 提供的 ns 时间戳是从午夜开始的。令人惊讶的是(可能不正确),其中只有一个被视为来自时代
    • 那是非标准用法;它甚至不是一个日期时间,更像是一个时间增量,这就是你想要的吗? 0.13 版中有一个 to_timedelta 可以处理这个问题;我更新了。
    • 在这种特殊情况下,它的所有日内数据都没有“日期”信息。只要在输入数据类型之间保持一致以允许比较,附加什么日期并不重要。或者也许有不同的方式来处理这些数据?
    • 你打算用它做什么?正如我在上面显示的,如果你愿意(或不),你可以转换为 datelike,或者如果你愿意,也可以将其设为 timedelta
    • 为什么它需要改变?如果 to_datetime 处理的时间只有像“03:00:00.xxx”这样的字符串是从纪元开始的时间,那么工作流程会很好。将今天的日期附加到它是反直觉的
    猜你喜欢
    • 2022-12-16
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    相关资源
    最近更新 更多