ARTICLE · 1025425
Excel 卡死?pandas 3 秒干完 10 万行
一、为什么 Excel 会卡死,pandas 却飞快
Excel 本质是单线程运行,所有计算挤在一个 CPU 核心上,还会把每行的格式、公式、条件格式全加载进内存——10 万行轻松突破 1GB。
pandas 则不同:能利用多核 CPU、只处理纯数据不加载格式、底层 C 语言优化、向量化运算极快,数据以 DataFrame 形式在内存中高效操作。一句话:Excel 是「带全家老小跑步」,pandas 是「轻装上阵冲刺」。
二、环境准备:5 分钟装好
装好 Python(记得勾选 Add Python to PATH),再装读写 Excel 的引擎:
pip install pandas openpyxlopenpyxl 是读写 Excel 的引擎,必须装。命令行输入 import pandas as pd 不报错即成功。
三、实战一:3 秒读取 10 万行
假设有个 sales_data.xlsx,含订单ID、日期、产品名称、销售数量、单价、地区。pandas 读取它:
import pandas as pd import time start = time.time() df = pd.read_excel('sales_data.xlsx') end = time.time() print(f"读取完成!共 {len(df)} 行数据") print(f"耗时:{end - start:.2f} 秒") print(df.head())实测 2.87 秒读完全部 10 万行。💡 小技巧:数据超 50 万行,建议存成 CSV 再用 pd.read_csv(),速度还能再快一倍。
四、实战二:数据清洗(比 Excel 快 10 倍)
去重、填空值、加计算列——Excel 里每步都要等几十秒,pandas 一行搞定:
# 1. 删除重复行(一行搞定) df_clean = df.drop_duplicates() # 2. 处理空值 print(df.isnull().sum()) # 查看空值分布 df_clean = df.dropna() # 删除含空值行 df_filled = df.fillna({'销售数量': 0, '单价': df['单价'].mean()}) # 3. 新增计算列(向量化,瞬间完成) df['销售总额'] = df['销售数量'] * df['单价']因为 pandas 是向量化运算,直接对整个列做乘法,不需要逐行循环,所以「一行代码、瞬间完成」。
五、实战三:数据分析(告别数据透视表)
按地区统计销售总额,Excel 要插透视表、拖字段、等刷新十几秒;pandas 不到 1 秒,分组 + 求和 + 均值 + 计数全完成:
# 按地区:求和 / 均值 / 计数 一步到位 region_summary = df.groupby('地区')['销售总额'].agg(['sum', 'mean', 'count']) print(region_summary) # 按产品统计销量 Top10(链式调用一气呵成) top_products = df.groupby('产品名称')['销售数量'].sum().sort_values(ascending=False).head(10) print(top_products)六、实战四:多表合并(VLOOKUP 终极替代)
Excel 里 VLOOKUP 配上几万行查找表,电脑基本可以歇着了。pandas 的 merge 底层用哈希连接,比 VLOOKUP 快几十倍,10 万行合并通常 1~2 秒:
# 读取产品信息表,按产品名称合并(类似 VLOOKUP) products = pd.read_excel('product_info.xlsx') df_merged = df.merge(products, on='产品名称', how='left') # 导出结果(utf-8-sig 防中文乱码) df_merged.to_excel('分析结果.xlsx', index=False) df_merged.to_csv('分析结果.csv', index=False, encoding='utf-8-sig')七、完整脚本 + 性能对比
把上面串起来,一套流程搞定读取→清洗→分析→导出:
import pandas as pd import time start = time.time() df = pd.read_excel('sales_data.xlsx') # 1. 读取 df = df.drop_duplicates().dropna() # 2. 清洗 df['销售总额'] = df['销售数量'] * df['单价'] # 2. 计算列 region_summary = df.groupby('地区')['销售总额'].agg(['sum','mean','count']) with pd.ExcelWriter('分析结果.xlsx') as writer: # 3. 导出 region_summary.to_excel(writer, sheet_name='地区汇总') df.to_excel(writer, sheet_name='明细数据', index=False) print(f"✅ 完成!总耗时:{time.time() - start:.2f} 秒")性能对比(10 万行):读取 30~60 秒→2~3 秒;删除重复项 30~60 秒→瞬间;新增计算列 10~20 秒→瞬间;数据透视表 15~30 秒→1 秒内;VLOOKUP 合并 1~2 分钟→1~2 秒;内存占用从 800MB~1.5GB 降到 100~200MB。