PySpark使用~isin筛选数据返回空DataFrame的原因及解决方法
问题原因与解决方法
核心原因
你用错了Pandas的方法:DataFrame.filter() 是用来按标签(列名或行索引)筛选的工具,不是用来按行的布尔条件筛选行的。你传入的~B.title.isin(list_A)是一个布尔序列,filter根本不识别这种条件,所以返回了空结果。而isin()本身功能正常,是因为你用错了包裹它的方法。
解决步骤
- 替换错误的
filter用法:直接用布尔索引筛选行,这是Pandas里按条件筛选行的标准方式:# 正确写法:用布尔索引 result = B[~B.title.isin(list_A)] # 或者用query方法,写法更简洁 result = B.query("~title.isin(@list_A)") - 验证结果:执行
result.count()就能得到正确的非空计数了。
额外说明
你之前尝试删除空值、调整空值条件没用,本质是因为filter方法的用途完全不符合你的需求。记住:
- 按行/列标签筛选 → 用
filter() - 按行的条件逻辑筛选 → 用布尔索引或
query()
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

