代码之家  ›  专栏  ›  技术社区  ›  Boosted_d16

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

  •  1
  • Boosted_d16  · 技术社区  · 6 年前

    我正在熊猫df中舍入值,但我想捕获不能舍入的值,即nan、字符串等。

    下面的示例工作正常,可以正确捕获nan:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Pedro Martins de Souza Regeesh Chandran    6 年前

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

    这是因为第一次验证给定值的尝试将包含在检查它是否为负数的测试中。但是,这种比较不适用于字符串。这就是为什么我们在继续之前首先添加规则来检查它是否是字符串。

    因此,在添加规则时,我重复: 小心您插入它们的顺序!

    推荐文章