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

同一DataFrame中对比两列筛选不匹配记录的问题咨询

Pandas 两列值对比筛选不匹配行解决方案

问题原因

原有代码diff = c.loc[~(c['Profit'] == c['Profit1'])]不符合预期,主要是两个常见的Pandas比较逻辑问题:

  • 数据类型不匹配:Profit列是字符串类型,若对比列Profit1是数值类型,即使字面量完全一致,不同类型的值用==直接比较也会返回False,导致误判
  • 空值比较规则特殊:Pandas中的NaN和任何值做==比较都会返回False,包括NaN和自身比较,若两行同一位置都是空值,会被误判为不匹配

修复后的实现代码

写法1(可读性高,适合调试)

# 统一两列数据类型为字符串,同时将空值替换为统一占位符(避免空值比较异常)
c['Profit_tmp'] = c['Profit'].astype(str).fillna('__NULL__')
c['Profit1_tmp'] = c['Profit1'].astype(str).fillna('__NULL__')

# 筛选取值不匹配的行
diff = c.loc[c['Profit_tmp'] != c['Profit1_tmp']].copy()

# 删除临时生成的辅助列
diff = diff.drop(columns=['Profit_tmp', 'Profit1_tmp'])

写法2(简化写法,无需修改原表)

diff = c.loc[~(
    c['Profit'].astype(str).fillna('__NULL__') 
    == c['Profit1'].astype(str).fillna('__NULL__')
)]

校验小技巧

如果需要确认类型转换是否正确,可以分别查看两列转换后的取值分布:

  • print(c['Profit'].astype(str).value_counts(dropna=False))
  • print(c['Profit1'].astype(str).value_counts(dropna=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:02