【问题标题】:TypeError: '>' not supported between instances of 'float' and 'str'TypeError: 'float' 和 'str' 的实例之间不支持'>'
【发布时间】:2019-11-12 08:43:09
【问题描述】:

摆脱这个简单错误的最简单方法是什么:

'float' 和 'str' 的实例之间不支持

'>'。

有些文章看起来很难解决这个问题,但在我看来,应该有一个简单的解决方法。喜欢把currentTime==(str(currentTime)). 其他我尝试的东西放在底部。我的代码:

df=pd.read_csv(file_name, header=None)    
last3Rows=df.iloc[-3:]    
for i in range(3):
    lastRow = df.iloc[i]
    tradeTime=lastRow[4]

    currentTime=datetime.datetime.now().timestamp()
    print (currentTime)
    print(type(currentTime))
    print (tradeTime)
    print(type(tradeTime))

    if currentTime > tradeTime:
        print("inner loop reached")

我尝试了什么:

currentTime = datetime.strptime('%H:%M:%S')  

给:

AttributeError: 模块 'datetime' 没有属性 'strptime'

currentTime = strptime('%H:%M:%S') 

给:

AttributeError: 模块 'datetime' 没有属性 'strptime'

currentTime=datetime.datetime.now().time() 

给:

TypeError: '>' 在 'datetime.time' 和 'str' 的实例之间不支持

【问题讨论】:

  • tradeTimestr。您需要将其转换为float
  • @flakes ...或者,更好的是,将tradeTime转换为日期时间(使用pd.to_datetime())并直接与datetime.datetime.now()进行比较。
  • 我想我看到了真正的问题。我需要去掉 '15:45:05' 中的冒号以变为 154505,以便将其切换为浮点数。

标签: python pandas


【解决方案1】:

您遇到的问题是尝试将“>”运算符与不同类型的操作数一起使用的结果。因此,解决此问题的最简单方法是将它们都转换为具有有效大于运算符实现的类型,例如使用 unix 时间戳转换为浮点数。

if float(currentTime.total_seconds()) > float(tradeTime.total_seconds()):
    print("inner loop reached")

【讨论】:

  • 我同意你的代码。但是,我收到错误:ValueError:无法将字符串转换为浮点数:'15:45:05'。我可能不得不去掉冒号。
  • 时间应作为日期时间对象或 unix 时间戳处理。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2017-09-22
  • 2018-03-06
  • 2020-01-28
  • 2020-08-12
  • 2021-11-21
  • 2018-05-22
  • 2020-05-05
相关资源
最近更新 更多