Python中使用pandas的isin()与多条件筛选数据的正确方法
发布时间 - 2025-12-29 00:00:00 点击率:次本文详解如何在pandas中结合isin()方法与其他条件(如年份匹配)高效筛选dataframe数据,并重点指出因数据类型不匹配(如字符串'2025' vs 整数2025)导致筛选结果为空的常见陷阱及解决方案。
在使用pandas进行数据筛选时,isin() 是处理“多值枚举匹配”的高效工具,常与逻辑运算符(&、|、~)组合实现复杂条件过滤。但一个极易被忽视的关键点是:列的数据类型必须与比较值严格一致。例如,你的原始代码:
df.loc[(df['Item Code'].isin(['04901', '04940'])) & (df['Year'] == '2025')]
之所以返回空结果,并非语法错误,而极大概率是 df['Year'] 列实际为整数类型(int64),却用字符串 '2025' 去匹配——这在pandas中会返回全 False 的布尔序列,最终导致零行被选中。
✅ 正确做法是先确认并统一数据类型。推荐按以下步骤排查与修正:
-
检查列的实际数据类型:
print(df['Year'].dtype) # 查看输出,常见为 int64 或 object print(df['Year'].head()) # 观察前几行真实值(是否带引号?有无空值?)
-
根据类型选择匹配方式:
- 若 Year 为整数型(最常见):
# 推荐写法:简洁、高效、可读性强 result = df[df['Item Code'].isin(['04901', '04940']) & (df['Year'] == 2025)]
- 若 Year 为字符串型(如从CSV读入未指定类型):
# 确保两边均为字符串 result = df[df['Item Code'].isin(['04901', '04940']) & (df['Year'] == '2025')]
- 若 Year 为整数型(最常见):
-
进阶技巧:提升健壮性与可读性
使用 .eq() 方法替代 == 可避免某些链式操作中的括号歧义;同时建议显式使用 .copy() 避免 SettingWithCopyWarning(若后续需修改结果):result = df[ df['Item Code'].isin(['04901', '04940']) & df['Year'].eq(2025) ].copy()
⚠️ 注意事项:
- & 是位运算符,必须用圆括号包裹每个条件,否则因运算符优先级问题会导致 TypeError 或逻辑错误(如 df['A']==1 & df['B']==2 ❌ 错误,应写为 (df['A']==1) & (df['B']==2) ✅);
- isin
() 对 NaN 值默认返回 False,若需包含缺失值,请额外用 isna() 组合; - 如需年份范围筛选(如2025–2025),可用 df['Year'].between(2025, 2025) 替代多个 ==。
掌握数据类型一致性与布尔索引规范,是写出可靠pandas筛选逻辑的基础。务必养成 print(df.dtypes) 和 df.sample(3) 快速探查数据的习惯。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何自定义建站之星模板颜色并下载新样式?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何快速查询网址的建站时间与历史轨迹?
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何在万网主机上快速搭建网站?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
如何在企业微信快速生成手机电脑官网?
如何用PHP快速搭建高效网站?分步指南
Laravel如何使用Telescope进行调试?(安装和使用教程)
js实现点击每个li节点,都弹出其文本值及修改
EditPlus中的正则表达式实战(5)
Laravel如何优化应用性能?(缓存和优化命令)
怎样使用JSON进行数据交换_它有什么限制
JS碰撞运动实现方法详解
iOS正则表达式验证手机号、邮箱、身份证号等
香港服务器租用每月最低只需15元?
如何在Windows虚拟主机上快速搭建网站?
音乐网站服务器如何优化API响应速度?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
利用 Google AI 进行 YouTube 视频 SEO 描述优化
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
IOS倒计时设置UIButton标题title的抖动问题
高防服务器如何保障网站安全无虞?
如何确认建站备案号应放置的具体位置?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何构建满足综合性能需求的优质建站方案?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
jQuery中的100个技巧汇总
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何实现模型的全局作用域?(Global Scope示例)
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
EditPlus中的正则表达式 实战(1)
详解Android图表 MPAndroidChart折线图
Laravel如何使用.env文件管理环境变量?(最佳实践)
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何在阿里云完成域名注册与建站?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】


() 对 NaN 值默认返回 False,若需包含缺失值,请额外用 isna() 组合;