news 2026/7/20 13:55:12

说真的,你可能误会Pandas了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
说真的,你可能误会Pandas了

有人担心pandas处理数据的效率是不是不咋地。

pandas是基于numpy数组来计算的,其实本身有优势,处理小批量数据集(百万行以下,1GB以内)效率是完全可以接受的,相比其他的数据处理库其实差异不大,因为1GB以内的容量对电脑内存的占用并不大,且单核处理起来也不吃力,这时候Pandas的速度和便捷性综合优势能发挥到最大。

但如果超出1GB的数据,由于计算资源吃紧和内存过载的关系,pandas就会显得心有余而力不足,一些复杂的数据处理操作会很消耗时间,比如groupby、apply等。

如何优化Pandas的速度呢?首先得知道pandas的哪些骚操作会让它变慢。

首当其冲的就是逐行循环操作,比如apply方法,是对每一行执行函数操作,这会促发触发 Python 解释器开销,速度非常的慢。

比如你对每一行执行多字段判断操作,比如math > 90, english > 90 则返回“优秀”,使用apply方法哪怕每一行只消耗0.0001秒,那处理一千万行的数据也需要17分钟,这是觉得没法忍受的。

如果你真的需要对每一行做处理,可以用numpy向量化来实现,可以用np.select(多分支条件)来实现,会比apply方法快上百倍以上,因为numpy是批量处理的。

import numpy as np # numpy向量化处理 condition = (df['math'] > 90) & (df['english'] > 90) df['result_np_where'] = np.where(condition, "优秀", "一般")

另外导致pandas变慢的还有它的数据类型,因为pandas默认使用高精度类型,这就导致无效内存占用过高,比如int64会比int8多8倍的内存。

对于精度要求不高的数据,你可以在加载数据的时候,去调整下数据类型,把高精度调整为合适的低精度,比如年龄字段int8精度就够了,没必要int32或者int64。

# 指定数据类型 dtype_opt = {'id': 'int32', 'age': 'int8', 'price': 'float32'} df = pd.read_csv('data.csv', dtype=dtype_opt)

还有重复的字符串不需要都用object类型,比如省份名称,可以用category类型,这样占用的内存会降低。

df['province'] = df['province'].astype('category')

在读取数据文件的时候,很多人默认全部读取到内存,这对于几十M的小文件来说没什么,但如果是几GB的大文件,则会很快占满内存,导致数据处理变慢。

所以可以用pandas自带的分块加载(chunksize)的方式,将大文件分为n个小文件,分批去读取并处理,这样可以把几GB的大文件拆解成N个几十M的小文件,pandas处理起来就毫无压力。

chunk_size = 50000 # 每次读取5万行 results = [] for chunk in pd.read_csv('huge_file.csv', chunksize=chunk_size): chunk = chunk[chunk['value'] > 0] # 过滤处理 results.append(chunk.groupby('category').sum()) final_result = pd.concat(results).groupby(level=0).sum() # 合并结果

当然以上的优化方法也只使用pandas处理中小规模的数据,对于大数据集尽管优化后速度提升也不会明显。

大数据集有大数据集的处理手段,有不少类pandas的替代加速库可以使用,比如polars、dash、modin、cudf等,它们采用并行计算、分布式或者硬件加速的方式来加快数据处理速度。

而且它们大多是用pandas的接口,函数、方法和pandas类似,切换的学习成本很低,比如Polars、Modin、cuDF。

那什么场景下使用对应的数据处理库呢?就像之前说的,小数据集或者快速验证的数据可以用pandas,单机处理中大数据集用Polars或Modin,分布式处理超大数据集用Dask,有GPU加速用cuDF,复杂查询则用DuckDB。

总的来说,Pandas则绝大多数场景下速度已经够用了,而且它的生态和功能是最完善的,其他加速库尽管速度上有优势,但体系能力还是差不少的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 15:31:00

一文读懂7大排班考勤系统的核心差异与适用场景

【导读】在制造业三班倒工厂、全国铺开的连锁门店、业务波动剧烈的服务业中,排班考勤已经不再是一张 Excel 能“撑住”的事。班次多、规则杂、加班结算复杂,一旦出错就是员工投诉、劳动仲裁和用工成本失控。面对市场上功能各异的排班考勤系统&#xff0c…

作者头像 李华
网站建设 2026/7/18 1:46:17

USB厂商ID与设备型号对照表

USB厂商ID与设备型号对照表(Wan AI Lab Wan2.2-T2V-5B 系列深度解析) 在现代多媒体内容生成系统中,硬件识别与功能映射的精确性变得愈发关键。USB设备标识符(Vendor ID 和 Product ID)作为操作系统识别外设的基础机制&…

作者头像 李华
网站建设 2026/7/19 17:24:37

重庆思庄oracle技术分享-sql top vs limit

你想了解数据库中 LIMIT 和 TOP 这两个关键字的核心区别、适用场景和具体用法,对吧?这两个关键字的核心目标都是限制查询结果返回的行数,但适用的数据库类型、语法格式和功能细节有明显差异。一、核心区别与适用场景特性 …

作者头像 李华
网站建设 2026/7/20 5:38:04

Facefusion输出无视频?检查路径中文问题

Facefusion输出无视频?检查路径中文问题 你在用 FaceFusion 换脸时,命令跑完了,进度条走到底,日志也显示“Processing completed”——结果一查输出目录,啥都没有。 更离谱的是,终端干干净净,连…

作者头像 李华
网站建设 2026/7/16 19:51:17

大模型推理框架怎么选?vLLM、TensorRT-LLM、Ollama等主流方案对比

大模型推理框架怎么选?vLLM、TensorRT-LLM、Ollama等主流方案对比 在一台普通笔记本上跑通一个大模型,和在金融交易系统中支撑每秒上万次低延迟调用——这两件事看似都叫“部署大模型”,实则天差地别。随着LLM从实验室走向产线,推…

作者头像 李华
网站建设 2026/7/20 11:25:54

DL/T 645物联网设备一物一码协议架构设计

在电力物联网规模化建设背景下,DL/T 645系列标准为物联网设备的规范化管理提供了核心依据。一物一码技术作为设备全生命周期管理的关键载体,其与DL/T 645标准的深度融合,可实现设备身份唯一标识、数据可信传输、运维精准管控。本文基于DL/T 6…

作者头像 李华