【问题标题】:question on timedelta objec in for loop (python)关于for循环中timedelta对象的问题(python)
【发布时间】:2021-02-06 23:06:20
【问题描述】:

我有一个具有输出的 TimeDelta 对象(比如 T

Timedelta('0 days 10:30:05.25')

我将它的条目连接到一个变量中

var = str(T._h) + str(':') + str(T._m)

产生所需的输出:'10:30'

但是,当我尝试在 for 循环中运行上述代码并在每次迭代中更改 T 时,var 的输出为 '0:0'。如果我在某个迭代中使用断点在 RHS 上执行 var 的数量,我确实得到了所需的输出。似乎 for 循环不允许将此数量保存到 var 中?我之前已经设置了时间睡眠量,但这没有帮助。

不胜感激。 下面是一个示例示例,其中t_str 在运行结束时将产生“0:0”,而带有断点则会产生正确的答案。

import datetime
import pandas as pd 

T = pd.to_timedelta('10.55hours')

for ii in range(0, 3):

    T = T + datetime.timedelta(milliseconds=50)

    var = str(T._h) + str(':') + str(T._m)

    print(var) 

【问题讨论】:

  • 请提供预期的minimal, reproducible example。显示中间结果与您的预期不同的地方。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。
  • @Prune 在上面用 mwe 编辑过。
  • 不完全是:您的代码不会产生任何结果。
  • 但是请注意您的示例:如果您在更新后的任何地方print(T),您将评估未完成的对象,并再次获得预期的输出,而不是错误。很抱歉,我不知道为什么会这样。
  • @Prune 是的,在循环内每次更新 var 后,我都没有得到预期的输出。我在 Python 2.7 上得到“0:0”

标签: python pandas string datetime


【解决方案1】:

这应该可以解决您的问题并产生所需的输出

import datetime
import pandas as pd

T = pd.to_timedelta('10.55hours')

for ii in range(0, 3):
    T = T + datetime.timedelta(milliseconds=50)
    print(T)
    var = "%d:%d:%d.%d" % (T._h, T._m, T._s, T._ms)
    print(var)
    # output : 10:33:0.150

【讨论】:

  • 谢谢 - 你能告诉我如何包含几秒钟和几毫秒吗?例如,如果 Timedelta 看起来像 10:33:30.2500
  • 谢谢,但这对我不起作用...我收到0:0:0.0 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2011-01-26
  • 2021-08-03
相关资源
最近更新 更多