当前位置: 首页 > 面试题库 >

PySpark:when子句中的多个条件

郜杰
2023-03-14
问题内容

我想修改当前为空的数据框列(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|对于逻辑析取和~逻辑求反)。

您创建的条件也是无效的,因为它不考虑运算符的优先级。&在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


 类似资料:
  • 问题内容: 例如,我对我的书籍清单有动态过滤器,可以在其中设置特定的颜色,作者和类别。该过滤器可以一次设置多种颜色,也可以设置多种类别。 如何有条件地添加“ where”? 问题答案: 如您在API文档中所见,collection()方法返回一个CollectionReference。CollectionReference扩展了Query。Query.where()和Query.orderBy()

  • 问题内容: 我目前有一个查询,它将根据我想使用的任何条件从数据库中提取一堆信息。 如果参数=’‘,我希望能够删除注释部分并仅显示所有行 例如,如果我使用它,它将按该参数搜索,如果我使用它,将按该参数搜索。 我已经尝试使用以下方法和其他一些尝试,但是进展并不很快。 问题答案: 您可能需要考虑构建查询。

  • 问题内容: 我正在尝试获取id = 3或id = 9或id = 100的内容…请记住,我可以拥有几百个这些ID。 编写查询的最有效方法是什么? 问题答案:

  • 我有这个代码: 它需要一个输入来填充,所以一个特定的按钮得到一个类添加。现在我想要检查多个输入,如果它们都被填充而不是空的,我想要添加类“UK-Button-Success”到一个按钮。 我试过的其他方法都不起作用。 我该怎么做?

  • 问题内容: 我今天输入了错误的查询,但它仍然有效,并给出了预期的结果。我的意思是运行此查询: 但是我不小心跑了这个查询 (请注意,而不是最后一个子句中的) 并且都从用户ID返回了正确的员工ID。 这两个查询有什么区别?第二种形式是否仅联接满足条件的2个表的成员,而第一种形式将联接整个表,然后运行查询?一个效率比另一个效率高吗?还有其他我想念的东西吗? 谢谢! 问题答案: 对于这样的内部联接,它们在

  • 问题内容: 假设我想要一个JasperReport,它可以让用户根据需要过滤日期。SQL如下: 现在,如果他们没有传递日期,我不想按某个日期进行过滤。我发现了人们使用的以下错误信息: 并使用以下默认值定义参数: 这无法正常工作,因为不会以我的SQL Server可以理解的格式输出日期。我想让条件条件仍然与jdbc驱动程序一起使用一条准备好的语句,并将参数扔进去,我只希望准备好的语句依赖于该参数是否