Pandas DataFrame使用NOT IN筛选行的代码失效问题咨询
Pandas 排除匹配行的代码修正方案
你当前代码过滤失效的原因和对应调整方法如下:
问题定位
- 存在变量名错配:你实际声明的用于匹配排除的DataFrame是
code_ifc,但代码中引用的是ifc_df['code_ifc']。如果运行没有直接报NameError,说明是DSS/Notebook环境里残留了历史运行生成的ifc_df旧对象,这个对象的内容和你当前要用来匹配的code_ifc完全不一致,自然无法正确剔除对应行。 - 潜在隐藏问题:就算修正了变量名,如果两边匹配列的数据类型、字符串格式不统一,
isin判断也会失效。比如demo_df里的EXTERNAL_PARTNER_CODE是带前后空格的字符串、或是存为文本类型,而code_ifc里的匹配列是整数类型,哪怕数值看起来一样,匹配也会失败。
调整步骤
- 首先修正变量引用错误:把代码里的
ifc_df替换为你实际定义的code_ifc对象,同时核对code_ifc里存储合作伙伴编码的实际列名(比如如果列名就是code_ifc,则正确引用为code_ifc['code_ifc'])。 - 增加匹配值的格式统一处理,避免类型/格式不匹配导致的过滤失效:
# 替换为code_ifc中实际存储匹配编码的列名 exclude_codes = code_ifc['code_ifc'].astype(str).str.strip() # 对demo_df的待匹配列做同样的格式清洗,去除空格、统一类型 demo_match_col = demo_df['EXTERNAL_PARTNER_CODE'].astype(str).str.strip() # 执行过滤,保留不在排除列表中的行 demo_ER_df = demo_df[~demo_match_col.isin(exclude_codes)] - 前置校验逻辑:运行代码前可以先打印基础信息核对,比如打印
code_ifc.columns确认匹配列名、打印排除编码列表的长度,确认引用的对象和你预期的完全一致,避免环境残留的旧变量干扰最终结果。
内容的提问来源于stack exchange,提问作者butter
相关产品推荐
相关产品推荐

