【问题标题】:Convert timedelta to floating-point将 timedelta 转换为浮点数
【发布时间】:2014-02-20 06:51:07
【问题描述】:

我从两个日期时间的减​​法中得到了一个 timedelta 对象。我需要这个值作为浮点数进行进一步计算。 我发现的所有内容都可以使用浮点数进行计算,但是结果 仍然是一个 timedelta 对象。

time_d = datetime_1 - datetime_2
time_d_float = float(time_d)

不工作。

【问题讨论】:

    标签: python datetime python-2.7 floating-point timedelta


    【解决方案1】:
    from datetime import timedelta,datetime
    x1= timedelta(seconds=40, minutes=40, hours=5)
    x2= timedelta( seconds=50, minutes=20, hours=4)
    x3=x1-x2
    x5 = x3.total_seconds()
    print(x5)
    print(type(x5))
    print(type(x1))
    print(x1)
    
    # if you are working with Dataframe then use loop (* for-loop).
    

    【讨论】:

      【解决方案2】:

      In Python 3.2 或更高,你可以将两个timedeltas 分开来给出一个浮点数。如果您需要以秒以外的单位表示值,这很有用。

      time_d_min = time_d / datetime.timedelta(minutes=1)
      time_d_ms  = time_d / datetime.timedelta(milliseconds=1)
      

      【讨论】:

      • 我认为这是最自然的方式。除此之外,它还可以很好地适应其他语言/系统的时间实现。
      【解决方案3】:

      您可以使用 numpy 来解决这个问题:

      import pandas as pd
      import numpy as np
      
      time_d = datetime_1 - datetime_2
      
      #for a single value
      number_of_days =pd.DataFrame([time_d]).apply(np.float32)
      
      #for a Dataframe
      number_of_days = time_d.apply(np.float32)
      

      希望对你有帮助!

      【讨论】:

      • 您的建议出现此错误:AttributeError: 'datetime.timedelta' object has no attribute 'apply'
      • 嗨@lancew,感谢您接听!在这种情况下,我需要将数据框转换为浮点数,这样它就可以解决。如果你想转换一个唯一值,你可以这样做:pd.DataFrame([time_d]).apply(np.float32)。在这种情况下,您需要同时导入“pandas as pd”和“numpy as np”。虽然我会测试其他方式。请让我知道它是否有效。
      • 现在,我得到这个错误:“TypeError: float() argument must be a string or a number, not 'Timedelta'”
      • 我遇到了类似的问题。我使用to_numpy() 解决了它,例如df["column"].to_numpy().astype(float)。另请参阅此处的解决方案stackoverflow.com/questions/49370756/…。
      【解决方案4】:

      如果您需要天数作为浮点数,您可以使用 timedelta 的 days 属性

      time_d = datetime_1 - datetime_2
      number_of_days = float(time_d.days)
      

      【讨论】:

      • 这仅给出天数。您会丢失 time_d 中的任何小时分钟或秒数。这不准确。
      【解决方案5】:

      我之前遇到过同样的问题,我使用 timedelta.total_seconds 将 Estimated duration 转换为带有 float 的秒数,它可以工作。 我希望这对你有用。

      from datetime import timedelta,datetime
      
      time_d = datetime_1 - datetime_2
      
      time_d.total_seconds()                  
      

      【讨论】:

      • 这如何在当前接受的答案之上添加任何内容?
      【解决方案6】:

      您可以使用total_seconds 方法:

      time_d_float = time_d.total_seconds()
      

      【讨论】:

      • 我得到 AttributeError: 'datetime.timedelta' 对象没有属性 'total_seconds'。
      • timedelta.total_seconds() 在 Python 2.7/3.2 中引入
      • @aaa90210 - 这是一种方法,应该与 () 一起使用
      • Not to be confused with timedelta.seconds(它返回一个 int,顺便说一句)。
      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2011-07-28
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多