我想修改当前为空的数据框列(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() ^
SyntaxError由于Python没有&&运算符,因此会出现错误异常。它具有and,&而后者是在上面创建布尔表达式的正确选择Column(|对于逻辑析取和~逻辑求反)。
SyntaxError
and
&
Column
|
~
您创建的条件也是无效的,因为它不考虑运算符的优先级。&在Python中,优先级高于,==因此必须在表达式中加上括号。
==
(col("Age") == "") & (col("Survived") == "0") ## Column<b'((Age = ) AND (Survived = 0))'>
顺便说一句,when函数等效于case表达式notWHEN子句。仍然适用相同的规则。连词:
when
case
WHEN
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