当前位置: 首页 > news >正文

别再只会用Excel了!用Pandas的‘与’‘或’筛选,处理万行数据快10倍

别再只会用Excel了!用Pandas的‘与’‘或’筛选,处理万行数据快10倍

当Excel表格加载超过1万行数据时,滚动条开始变得迟缓,筛选菜单弹出需要等待,复杂的多条件公式让文件体积膨胀——这是许多数据分析师每天面对的困境。而同样体量的数据在Pandas中处理,筛选操作往往能在瞬间完成。这种效率差异源于底层设计:Excel是单线程的电子表格工具,而Pandas是基于NumPy的向量化运算库。本文将揭示如何用简单的&|符号,在Pandas中实现Excel难以企及的多条件筛选效率。

1. 为什么Pandas比Excel快10倍?

传统Excel处理数据时,每个单元格的计算都是独立进行的。当你在G2单元格输入=IF(AND(A2="北京",B2="科研"),"是","否")并向下拖动填充时,Excel需要逐行执行这个判断。而Pandas的向量化运算完全不同——它一次性对整个列执行操作,这种批处理模式就像用集装箱运输替代零担物流。

性能对比实验显示:

import pandas as pd import time # 生成10万行测试数据 data = pd.DataFrame({ '城市': ['北京']*50000 + ['上海']*30000 + ['广州']*20000, '职业': ['科研']*20000 + ['工程师']*30000 + ['教师']*50000 }) # Pandas筛选计时 start = time.time() result = data[(data['城市']=='北京') & (data['职业']=='科研')] print(f"Pandas耗时: {time.time()-start:.4f}秒") # 等效Excel操作模拟(通过逐行迭代) start = time.time() result = [] for idx, row in data.iterrows(): if row['城市']=='北京' and row['职业']=='科研': result.append(row) print(f"逐行判断耗时: {time.time()-start:.4f}秒")

典型输出结果:

Pandas耗时: 0.0025秒 逐行判断耗时: 3.8762秒

2. 基础筛选:从Excel思维到Pandas思维

Excel用户习惯通过GUI界面操作筛选器,而Pandas需要编写代码。这种思维转换的回报是:一旦掌握语法规则,就能用更简洁的方式表达复杂逻辑。

2.1 单条件筛选对照

Excel操作:

  1. 点击数据选项卡 → 筛选
  2. 在城市列下拉菜单中取消"全选"
  3. 勾选"北京"

Pandas等效代码:

beijing_data = data[data['城市'] == '北京']

2.2 多条件"与"筛选

Excel中的"与"关系通常通过:

  • 高级筛选中的条件区域
  • =FILTER()函数配合AND()逻辑
  • 多个筛选器叠加应用

Pandas则使用&符号连接条件:

# 筛选北京的职业为科研人员 beijing_researchers = data[(data['城市'] == '北京') & (data['职业'] == '科研')]

注意:每个条件必须用括号包裹,因为&的优先级高于==

3. 高级筛选技巧:突破Excel的局限

当筛选条件变得复杂时,Excel公式会变得冗长难维护,而Pandas代码却能保持优雅。

3.1 多条件"或"筛选

Excel中处理多条件"或"关系时,通常需要:

  • 使用=FILTER()配合+运算
  • 创建辅助列聚合判断结果
  • 使用数据透视表过滤

Pandas使用|符号实现:

# 筛选北京或上海的数据 bj_sh_data = data[(data['城市'] == '北京') | (data['城市'] == '上海')]

对于更多条件的"或"关系,Pandas有更高效的写法:

cities = ['北京', '上海', '广州', '深圳'] multi_or = data[data['城市'].isin(cities)]

3.2 混合条件组合

实际业务中经常需要组合"与"和"或"逻辑。例如:筛选(北京或上海)且职业为科研的数据。

Excel实现这种逻辑需要嵌套函数:=FILTER(data, (城市="北京")+(城市="上海")*(职业="科研"), "")

Pandas代码则直观得多:

complex_filter = data[((data['城市'] == '北京') | (data['城市'] == '上海')) & (data['职业'] == '科研')]

4. 实战:从数据导入到结果导出完整流程

让我们通过一个真实业务场景演示完整工作流:从销售数据中筛选出华东地区销售额超过100万或华北地区销售额超过50万的订单。

4.1 数据准备

import pandas as pd # 模拟销售数据 sales_data = pd.DataFrame({ '订单ID': range(1, 10001), '地区': ['华东']*4000 + ['华北']*3000 + ['华南']*3000, '销售额': [round(x*1000, 2) for x in 100 + 50 * pd.np.random.randn(10000)] })

4.2 构建筛选条件

condition = ((sales_data['地区'] == '华东') & (sales_data['销售额'] > 1000000)) | \ ((sales_data['地区'] == '华北') & (sales_data['销售额'] > 500000)) high_value_orders = sales_data[condition]

4.3 结果导出

# 导出到Excel high_value_orders.to_excel('高价值订单.xlsx', index=False) # 导出到CSV high_value_orders.to_csv('高价值订单.csv', index=False, encoding='utf_8_sig')

5. 性能优化技巧

处理超大数据集(超过100万行)时,这些技巧可以进一步提升效率:

5.1 使用query方法

对于复杂条件,query()方法通常比布尔索引更快:

# 等效于之前的混合条件 fast_filter = sales_data.query("(地区 == '华东' & 销售额 > 1000000) | (地区 == '华北' & 销售额 > 500000)")

5.2 避免链式索引

以下两种写法结果相同,但第二种效率更高:

# 不推荐 slow = data[data['城市'] == '北京']['职业'] == '科研' # 推荐 fast = data.loc[(data['城市'] == '北京') & (data['职业'] == '科研'), '职业']

5.3 使用categorical类型

对于重复值多的文本列(如地区、城市),转换为category类型可节省内存并加速操作:

data['城市'] = data['城市'].astype('category')

在最近的一个客户数据分析项目中,将200万行数据中的地区列转换为category类型后,筛选操作时间从1.2秒降低到0.3秒。这种优化在处理超大数据集时效果尤为明显。

http://www.jsqmd.com/news/680363/

相关文章:

  • 2026南充施工垫路铁板租赁品牌选型:南充随车吊租赁、南充吊车租赁、南充垫路钢板租赁、南充大型吊车租赁、南充工地吊车租赁选择指南 - 优质品牌商家
  • 2026中国生成式AI大会开幕GLM5Seedance2开创AGI新纪元
  • 面试官最爱问的模型评估指标:从电商推荐到风控模型,说说准确率、精确率、召回率怎么选
  • 2026年比较好的VOC废气处理/VOC废气处理设备高口碑品牌推荐 - 品牌宣传支持者
  • 别再死记硬背公式了!用Python+SymPy实战拉格朗日乘子法,5分钟搞定约束优化问题
  • 聚氨酯保温钢管生产厂家哪家好?2026专业钢管源头厂家推荐:聚氨酯保温无缝钢管、直埋钢套钢蒸汽保温管源头厂家 - 栗子测评
  • 从splrep到splev:深入SciPy样条插值底层,看懂tck三元组,实现自定义插值控制
  • 【Docker 27 AI容器调度终极指南】:20年SRE亲授GPU/内存/拓扑感知配置黄金参数(含实测QPS提升3.7倍数据)
  • 圆盘干燥机厂家哪家好?2026专业闪蒸干燥机厂家公司推荐:振动流化床厂家/带式干燥机厂家 - 栗子测评
  • 【Loom生产就绪 checklist】:Java 25虚拟线程上线前必须验证的12个关键项(含JFR监控模板与GC调优参数)
  • 2026年比较好的工业废气处理/废气处理设备实力工厂推荐 - 品牌宣传支持者
  • 2026西北灌装瓶装水设备:兰州变频供水设备/兰州变频恒压供水设备/兰州小型桶装水设备/兰州小型水处理设备/兰州工业水处理设备/选择指南 - 优质品牌商家
  • 给NRF52832蓝牙设备加上“身份证”:手把手教你配置DIS服务(含nRF Connect验证)
  • 从Matlab天线工具箱到实际仿真:用软件验证弗里斯公式常数-32.44dB的正确性
  • 薄元近似(TEA)与傅里叶模态法(FMM)的光栅建模
  • 【通义千问(Qwen)】视频分析与多模态模型汇总
  • 别再乱接排线了!J-Link V10高速信号避坑指南:线长、转接板与稳定连接实战
  • 2026年Q2乐山苏稽跷脚牛肉哪家正宗:乐山苏稽特色跷脚牛肉哪家好/乐山苏稽特色跷脚牛肉在哪/乐山苏稽特色跷脚牛肉推荐/选择指南 - 优质品牌商家
  • 容器启动慢?磁盘爆满?Docker 27存储驱动调优全解析,深度解读inode泄漏、layer膨胀与GC失效三大隐性故障
  • 老盒子焕新颜:给创维H2901-T2刷入精简ROOT固件,解锁安装第三方软件和性能提升
  • 2026年知名的东莞橱柜定制/东莞橱柜板材/东莞橱柜报价可靠供应商推荐 - 行业平台推荐
  • 从YX6300到TPA3110:我的语音播报项目实战选型与避坑全记录
  • 智慧合同管理系统是什么意思?一文讲清合同管理系统的定义、功能与核心价值
  • 2026年口碑好的茶叶礼盒/食品礼盒/抽屉礼品礼盒公司选择指南 - 行业平台推荐
  • 2026年比较好的大连家居铝型材/铝型材批发/建筑铝型材公司对比推荐 - 品牌宣传支持者
  • 2026年评价高的回信器限位开关/限位开关/双刀双掷式限位开关/防爆电气限位开关多家厂家对比分析 - 行业平台推荐
  • STM32F407实战:用CubeMX+HAL库搞定霍尔传感器FOC启动(附V/F与I/F调试心得)
  • ESP32玩转LVGL:给你的UI换个“皮肤”,SD卡里存几套字体随时切换
  • 2026年车库卷帘门技术解析:卷帘门品牌、卷帘门安装、双层保温卷帘门、商铺保温卷帘门、工业保温卷帘门、快速卷帘门选择指南 - 优质品牌商家
  • 136. 如何在 Rancher Kubernetes Engine(RKE)CLI 或 Rancher v2.x 配置的 RKE 集群中启用 CoreDNS 查询日志