我在pandas df中舍入值,但我想捕捉不能舍入的值,即nans,strings等。
以下示例工作正常并正确捕获nans:
df = df.applymap(lambda x: int(round(float(x))) if not isnan(x) else x)
但是如何在此代码中添加“ - ”。
我失败的尝试:
df = df.applymap(lambda x: int(round(float(x))) if not isnan(x) if not "-" else x)
使用一系列or
逻辑测试应该为你做的伎俩。
df = df.applymap(lambda x: int(round(float(x))) if not (isinstance(x, str) or math.isnan(x) or x<0) else x)
首先,此代码将检查x是否为字符串。如果不是,它将检查它是否是nan
。如果不是,它将检查该值是否为负(我相信最后一部分可以删除)。如果这些语句中的任何一个返回True
,程序立即不会对该值进行舍入。否则,它会。
您甚至可以在此语句中添加更多规则,但您必须注意:插入它们的顺序将定义规则是否有效。例如,如果我按以下顺序插入规则,系统将在查找字符串值时返回错误:
x<0 or math.isnan(x) or isinstance(x, str)
发生这种情况是因为首次尝试验证给定值将包括测试以检查它是否为负数。但是,这种比较不适用于字符串。这就是我们在继续之前首先添加规则以检查它是否为字符串的原因。
所以在添加规则时,我再说一遍:小心插入它们的顺序!