You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中合并过滤NaN与指定内容失败,求正确实现方法

问题分析与解决

首先,你单独执行的代码其实存在语法错误(大概率是提问时的笔误),这也是合并后失效的核心原因:

  • 第一个过滤逻辑,正确写法应该是df.loc[df['Entity'] != 'World'],而不是df.loc[['Entity'] != ('World')]。['Entity']是一个列表,和字符串'World'比较得到的是布尔值True,此时df.loc[True]只会返回DataFrame的第一行,根本达不到过滤World行的效果——你说单独执行成功,说明实际运行时你写的是df['Entity'] != 'World'(基于DataFrame的列而非列表)。
  • 第二个过滤逻辑,正确写法是df2.loc[df2['Code'].str.contains('', na=False)],['Code']是列表,没有str方法,能成功执行说明你实际用的是df2['Code']这个Series。

合并过滤的正确写法

合并两个条件时,需要注意两点:

  1. 每个条件都要基于DataFrame的列(即df['列名']),不能用列表['列名'];
  2. 逻辑运算符用&(表示“且”),且每个条件必须用括号括起来,避免运算符优先级问题。

示例代码:

# 一步完成双重过滤
df2 = df.loc[(df['Entity'] != 'World') & (df['Code'].str.contains('', na=False))]

或者分步执行(和你单独执行的逻辑一致):

df2 = df.loc[df['Entity'] != 'World']
df2 = df2.loc[df2['Code'].str.contains('', na=False)]

额外优化建议

如果你的需求只是过滤掉Code列的NaN值,用df['Code'].notna()比str.contains('', na=False)更直观高效,写法如下:

df2 = df.loc[(df['Entity'] != 'World') & (df['Code'].notna())]

内容的提问来源于stack exchange,提问作者Shinsui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:06:23