如何在 Pandas 中正确使用 isin 与多条件组合进行数据筛选

发布时间 - 2025-12-29 00:00:00    点击率:

本文详解 pandas 中 `isin()` 与其它条件(如数值比较)联合过滤 dataframe 的常见错误及解决方案,重点解决因数据类型不匹配(如字符串 `'2025'` 误用于整型 `year` 列)导致的空结果问题。

在使用 Pandas 进行数据筛选时,isin() 是高效判断某列值是否属于指定集合的常用方法。但当它与其它条件(如年份等于 2025)组合使用时,极易因数据类型不一致而返回空结果——这正是你遇到问题的根本原因。

你的原始代码如下:

df.loc[(df['Item Code'].isin(['04901', '04940'])) & (df['Year'] == '2025')]

看似逻辑清晰,但若 df['Year'] 列的实际数据类型为 int64(即数值型年份),那么用字符串 '2025' 去比较将永远返回 False,最终整个布尔索引结果全为 False,故返回空 DataFrame。

✅ 正确做法是确保类型严格匹配:

  • 若 Year 为整数(最常见情况),应写为 2025(无引号):
    df[(df['Item Code'].isin(['04901', '04940'])) & (df['Year'] == 2025)]
  • 更推荐使用链式调用与 eq() 方法,语法更清晰、可读性更强,且同样避免隐式类型转换风险:
    df[df['Item Code'].isin(['04901', '04940']) & df['Year'].eq(2025)]

? 验证数据类型的小技巧:
运行 df.dtypes 查看各列类型。若发现 Year 显示为 int64 或 float64,则必须用数值比较;若为 object 且实际存的是字符串年份(如 '2025'),才可用 '2025'。必要时可统一转换类型:

df['Year'] = pd.to_numeric(df['Year'], errors='coerce')  # 转为数值,异常转为 NaN

⚠️ 注意事项:

  • & 是位运算符,必须用括号包裹每个条件(如 (cond1) & (cond2)),否则因运算符优先级会导致语法错误或逻辑错误;
  • 避免混用 loc 和纯布尔索引:除非需同时选行列,否则直接 df[boolean_mask] 更简洁高效;
  • isin() 支持列表、元组、NumPy 数组等可迭代对象,但不支持单个值(此时应直接用 ==)。

总结:Pandas 筛选失败的“头号杀手”往往是隐形的数据类型错配。养成检查 dtypes、显式指定匹配类型的习惯,能大幅减少此类调试时间。


# 可迭代对象  # 隐式类型转换  # numpy  # pandas  # 数据类型  # Object  # 运算符  # 整型  # 位运算符  # 字符串  # 类型转换  # 对象  # 布尔  # 链式  # 的是  # 推荐使用  # 此类  # 更强  # 但不  # 时应  # 但当 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Android okhttputils现在进度显示实例代码  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  网页设计与网站制作内容,怎样注册网站?  高端网站建设与定制开发一站式解决方案 中企动力  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  javascript中对象的定义、使用以及对象和原型链操作小结  如何快速配置高效服务器建站软件?  javascript日期怎么处理_如何格式化输出  在线制作视频网站免费,都有哪些好的动漫网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  iOS中将个别页面强制横屏其他页面竖屏  java获取注册ip实例  如何将凡科建站内容保存为本地文件?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站制作报价单模板图片,小松挖机官方网站报价?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何自定义建站之星网站的导航菜单样式?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何在橙子建站上传落地页?操作指南详解  如何快速查询域名建站关键信息?  微信小程序 HTTPS报错整理常见问题及解决方案  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  javascript读取文本节点方法小结  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何快速生成专业多端适配建站电话?  如何用好域名打造高点击率的自主建站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  独立制作一个网站多少钱,建立网站需要花多少钱?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Bootstrap CSS布局之列表  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何使用查询构建器?(Query Builder高级用法)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Linux网络带宽限制_tc配置实践解析【教程】  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  在centOS 7安装mysql 5.7的详细教程  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  JS碰撞运动实现方法详解