TypeError:“str”和“int”的实例在编码时不支持“<=”

2024-09-30 20:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

def encode_units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1

basket_sets = mybasket.applymap(encode_units)

我在这里得到了类型错误。我试图做一个篮子分析,我想把所有的正值都转换成1,并且只把0转换成0


Tags: 类型returnifdef错误setsencodeunits
2条回答

快速解决办法是:

def encode_units(x):
    if float(x) <= 0: 
        return 0 
    if float(x) >= 1:
        return 1

通过这种方式,可以将x变量转换为数字类型,只有这样才能将其与0或1进行比较。现在,似乎x是一个字符串,您无法将字符串(python理解为任何文本)与值进行比较。如果只有整数,而不是float(x),则可以使用int(x)

但是,如果您无法控制x,则仅将x转换为数字可能不起作用,因为并非所有变量都可以通过这种方式转换,并且转换过程可能会抛出错误。更安全的做法是:

def encode_units(x): 
    try:
        if float(x) <= 0:
            return 0
        if float(x) >= 1:
            return 1
    except:
        return 999

这样,如果转换不起作用,函数将返回999,您可以检查是否继续

由于比较字符串(x)和整数类型(0&;1),因此在这里得到一个TypeError。如果确定x包含字符串格式的数字,则可以先将x转换为整数/浮点,然后进行比较。以下是您如何做到这一点:

def encode_units(x):
    x = float(x)    # Convert `x` to an float

    if x <= 0:
        return 0
    if x >= 1:
        return 1

注意:如果x在字符串中不包含数字,您可能会得到一个ValueError

相关问题 更多 >