小编典典

PySpark:when子句中的多个条件

python

我想修改当前为空的数据框列(Age)的单元格值,并且仅当另一列(Survived)的对应行的值为0(年龄为空)时才这样做。如果在“存活”列中为1,但在“年龄”列中为空白,那么我将其保留为null。

我尝试使用&&运算符,但没有用。这是我的代码:

tdata.withColumn("Age",  when((tdata.Age == "" && tdata.Survived == "0"), mean_age_0).otherwise(tdata.Age)).show()

有什么建议如何处理吗?谢谢。

错误信息:

SyntaxError: invalid syntax
  File "<ipython-input-33-3e691784411c>", line 1
    tdata.withColumn("Age",  when((tdata.Age == "" && tdata.Survived == "0"), mean_age_0).otherwise(tdata.Age)).show()
                                                    ^

阅读 331

收藏
2020-12-20

共1个答案

小编典典

SyntaxError由于Python没有&&运算符,因此会出现错误异常。它具有and&而后者是在上面创建布尔表达式的正确选择Column|对于逻辑析取和~逻辑求反)。

您创建的条件也是无效的,因为它不考虑运算符的优先级&在Python中,优先级高于,==因此必须在表达式中加上括号。

(col("Age") == "") & (col("Survived") == "0")
## Column<b'((Age = ) AND (Survived = 0))'>

顺便说一句,when函数等效于case表达式notWHEN子句。仍然适用相同的规则。连词:

df.where((col("foo") > 0) & (col("bar") < 0))

析取:

df.where((col("foo") > 0) | (col("bar") < 0))

当然,您可以单独定义条件以避免使用括号:

cond1 = col("Age") == "" 
cond2 = col("Survived") == "0"

cond1 & cond2
2020-12-20