【问题标题】:Pandas datetime results are different after substract减去后熊猫日期时间结果不同
【发布时间】:2020-08-27 03:20:29
【问题描述】:

我有以下一段简单的代码:

pd.to_timedelta(
  pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914")
  )
)
# Result = 00:00:02.897746 

看起来,这个结果被修剪了一点。

pd.to_datetime("2020-05-03 19:12:36.508889914") + pd.to_timedelta("00:00:02.897746"))
# Result = 2020-05-03 19:12:39.406635914

2020-05-03 19:12:39.406636238 != 2020-05-03 19:12:39.406635914

为什么结果不同?我可以控制时间增量逗号后的数字吗?

【问题讨论】:

    标签: python-3.x pandas datetime timedelta


    【解决方案1】:

    试试这个:

    td = pd.to_timedelta(pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914"))
    
    print(pd.to_datetime("2020-05-03 19:12:36.508889914") + td)
    

    第二条语句的结果是2020-05-03 19:12:39.406636238,这是准确的。当您在第一行进行减法时,会有更多的小数点,但它没有显示在输出中。因此,当您将第一个语句的结果复制并粘贴到第二个语句时,您会失去一些准确性。

    【讨论】:

      【解决方案2】:

      结果不同,因为在第一种情况下精度更高,只是没有显示。看看total_seconds就可以看到这个

      pd.to_timedelta(pd.to_datetime("2020-05-03 19:12:39.406636238")
                      - pd.to_datetime("2020-05-03 19:12:36.508889914")).total_seconds()
      #2.897746324
      
      pd.to_timedelta("00:00:02.897746").total_seconds()
      #2.897746
      

      【讨论】:

        【解决方案3】:

        pandas datetime 仅精确到 nanoseconds

        虽然这只是一个显示格式问题,但底层计算应该没有什么不同

        你自己看结果

        x = pd.to_timedelta(
          pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914") , unit='N'
          )
        pd.to_datetime("2020-05-03 19:12:36.508889914") + x
        # Result =Timestamp('2020-05-03 19:12:39.406636238') which matches with inital datetime 
        

        【讨论】:

          猜你喜欢
          • 2018-11-15
          • 2021-08-30
          • 1970-01-01
          • 2015-09-19
          • 2016-10-16
          • 2019-05-20
          • 2017-11-19
          相关资源
          最近更新 更多