【发布时间】:2021-02-23 16:32:52
【问题描述】:
在 python 3.7 中,有没有办法检查列表综合中的 2 个条件?
例如,如果我从以下开始,它只确保值不是 nan:
[1 if x is not np.nan else 0 for x in df["value"]]
但不是只检查值是否为 nan,我还想检查它是否为 nan 或等于“N”。比如:
[1 if (x is not np.nan) or (x != "N") else 0 for x in df["value"]]
实现这一点的最佳方法是什么?
感谢您的帮助。
【问题讨论】:
-
is not np.nan不是您进行 NaN 检查的方式。 -
没关系。更大的问题是条件表达式不是必需的。
bool是int的子类,所以True == 1和False == 0。您可以简单地编写[x is not np.nan or x != "N" for x in df["value"]来获取布尔值列表。任何消耗列表期望1s 和0s 的东西都应该与Trues 和Falses 一样工作。 -
这个语法应该可以正常工作。
-
@chepner:不是这样。大量 Pandas/NumPy 代码将布尔值与 int 区别对待(
df和np表明此代码几乎可以肯定同时使用这两个库(尽管不是很好))。例如,使用布尔数组索引 NumPy 数组与使用整数数组索引它的作用非常不同。 -
另外,即使不存在 NaN 问题,
or也是错误的运算符。
标签: python list-comprehension nan