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

Pandas使用.loc过滤DataFrame返回意外结果及None值过滤问题

问题原因
  • pandas中使用==、!=运算符做值比较时,只要操作数包含np.nan(你表格里标注的NAN),比较结果会直接返回False,哪怕两边都是缺失值也不会按照正常逻辑判断是否相等。你使用的object类型列中,None会被自动兼容处理为np.nan,同样会触发该规则。
  • 你示例中的行包含多个缺失值,用!=比较返回的结果不符合预期的筛选逻辑,最终导致该行被误返回。
解决方案

1. 修正过滤逻辑

如果要正确比较两列是否不等(两边同为缺失值时视为相等,仅一侧缺失或值不同时视为不等),优先使用pandas内置的ne()方法,修正后的代码如下:

df = merged_df.loc[(merged_df['Areacode_1'].ne(merged_df['Areacode_2'])) & (merged_df['loc_1'].ne(merged_df['loc_2']))]

如果需要更灵活的判断规则(比如明确控制仅一侧缺失的行是否要被筛选出来),可以结合isna()方法自定义条件:

# 条件1:Areacode两列值不等 或 两列缺失状态不一致
cond1 = (merged_df['Areacode_1'] != merged_df['Areacode_2']) | (merged_df['Areacode_1'].isna() != merged_df['Areacode_2'].isna())
# 条件2:loc两列值不等 或 两列缺失状态不一致
cond2 = (merged_df['loc_1'] != merged_df['loc_2']) | (merged_df['loc_1'].isna() != merged_df['loc_2'].isna())
df = merged_df.loc[cond1 & cond2]

2. 单独筛选缺失值的正确写法

你之前过滤None返回空的问题,是因为不能用== None或== "None"判断pandas中的缺失值,统一使用isna()/isnull()方法即可:

# 筛选Areacode_1为缺失值的行
df_na = merged_df.loc[merged_df['Areacode_1'].isna()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:03