如果不是这个或这个,那么在lambda python pandas中

时间:2019-02-12 12:36:12

标签: python pandas conditional-statements

我正在pandas df中四舍五入值,但我想捕获无法四舍五入的值,例如nans,字符串等。

下面的示例工作正常,可以正确捕获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)

1 个答案:

答案 0 :(得分:2)

使用一系列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)

之所以会发生这种情况,是因为首次尝试验证给定值的操作包括进行测试以检查其是否为负数。但是,此比较不适用于字符串。这就是为什么我们首先添加规则以在继续之前检查它是否为字符串。

因此,添加规则时,我会重复:请注意插入规则的顺序!