我正在寻找一种干净的方法来解决以下问题:我希望过滤一个Dataframe,使其只包含至少为预定义的列名列表填充了一个值的行。
我不想单独列出所有条件:
df.where(col('col1').isNotNull() | col('col2').isNotNull() | ...)
这种方法是不可行的,因为列名列表可能会变得非常大,并且可能经常更改。
我现在的解决方案是将条件组合到一个单独的函数中:
def compose_condition(col_names):
condition = False
for col_name in col_names:
condition = condition | col(col_name).isNotNull()
return condition
然后将此函数的结果用作过滤条件:
my_col_names = ['col1', 'col2', 'col3']
df.where(compose_condition(my_col_names))
我的解决方案还有别的选择吗?
2条答案
按热度按时间csbfibhn1#
你可以用
dropna
并具体说明how='all'
要在指定子集中的所有列都为空时删除行,请执行以下操作:qoefvg9y2#
也可以使用python
functools.reduce
要将列名列表缩减为筛选条件,请执行以下操作: