
电子表格曾经风靡一时,现如今也还有很多用户。
你可能已经熟练掌握了 pandas + Excel,甚至记住了 Ctrl-C、Ctrl-V 和“设置单元格格式”这些快捷键。但是,当数据量增长、逻辑变得复杂或性能下降时,电子表格就会崩溃。
这 7 个库让 Python 的功能突飞猛进——它们可以处理分析、维度建模、自定义公式、大型数据集、实时用户界面等等——这些都是 Excel 无法胜任的。当“Excel 已经无法满足需求”时,我就会使用它们。
为什么用它:对于 pandas 因 MemoryError 而崩溃的数据集, vaex 可以使用内存映射快速有效地进行过滤、聚合和可视化。
import vaexdf = vaex.open('huge_dataset.hdf5')df = df[df.x > 0]agg = df.groupby('category', agg={'mean_y': vaex.agg.mean('y')})print(agg)用一个包含 12 亿行日志的数据集运行了测试。没有出现内存不足的情况,也没有崩溃,成功运行并得到结果。
为什么用它:你希望在 Python 中使用 DataFrame 上下文和类型安全,实现 Excel 公式(例如 IF、SUMPRODUCT)的表达能力。
import pandas as pddf = pd.DataFrame({ "price": [20, 35, 15, 40], "quantity": [2, 1, 3, 1], "discount": [0.9, 1.0, 0.8, 1.0],})df["revenue"] = df["price"] * df["quantity"] * df["discount"]from formulaic import Formulaformula = Formula("revenue ~ price * quantity + discount")y, X = formula.get_model_matrix(df)print("y (revenue):")print(y)print("\nX (design matrix):")print(X)
它用于统计建模和自定义 DSL 引擎。现在,Excel 的公式引擎任你操控。
为什么用它:你需要 DAX 的强大功能(筛选上下文、CALCULATE、时间智能),但又不想被 Microsoft 工具所束缚,而需要在 Python 中使用。
from pydax import evaluate, Contextctx = Context(table={'sales': [{'date': '2023-10-01', 'amount': 100}, {'date': '2023-10-02', 'amount': 150}]})expr = "SUMX(sales, sales[amount])"res = evaluate(expr, ctx)print(res) # 250在脚本中使用 DAX 风格的逻辑——更高层次的数据建模,无需 GUI。
panel + hvPlot)——基于数据框的交互式仪表板为什么用它:Excel 的数据透视表和切片器已经过时了。有了 panel 和 hvplot,你的代码就能变成可筛选的仪表板,并在笔记本或网页中即时刷新。
import panel as pnimport hvplot.pandasimport pandas as pddf = pd.DataFrame({'x': range(50), 'y': [i**2 for i in range(50)]})plot = df.hvplot.line('x', 'y')pn.Row(plot, df.hvplot.table()).servable()无需编写 HTML 或 JS 代码,即可获得用于探索的用户界面。
为什么用它:Excel 的“如果单元格 > 某个阈值,则执行此操作”逻辑,在直接进行链式转换时会变成可读代码。
from janitor import clean_names, conditional_evalimport pandas as pddf = pd.DataFrame({'Revenue': [100, 200, 0], 'Cost': [30, 80, 10]})df = ( df.clean_names() .conditional_eval( "profit_margin = (revenue - cost) " "/ revenue if revenue > 0 else 0" ))print(df)没有嵌套 lambda 表达式,没有逐行循环——只有管道内的电子表格逻辑。
为什么用它:电子表格无法处理单位换行或多索引空间/时间网格。xarray + pint 可以创建知道单位和坐标轴的数组。
import xarray as xrimport pintfrom pint import UnitRegistryureg = UnitRegistry()da = xr.DataArray([1, 2, 3], dims=['time'], attrs={'units': 'meter'})da = da * 2 * ureg.meterprint(da)它适用于处理科学数据、天气网格、信号——Excel 根本无法与之媲美。
为什么用它:Excel 的数据清洗是手动完成的。refineclient 连接到 OpenRefine,并允许你使用Python编写转换脚本(如分面、聚类、批量编辑)。
from refineclient import refineclient = refine.RefineClient("http://localhost:3333")project = client.new_project("dirty.csv")project.apply_operations([{"op": "cluster", "on": "Name", "mode": "levenshtein"}])project.export("cleaned.csv")脏数据条目通过聚类进行处理;你无需编写任何图形用户界面操作。这是 Excel “数据 → 清理” 功能的自动化版本,堪称完美。
Thanks for your reading!
Enjoying coding, my friends! 🧑💻🧑💻🧑💻💯💯💯
推荐阅读👇👇👇
🌟 如果你觉得这篇文章对你有帮助,并且愿意支持我的话,你可以: 🌟
• 👍 点赞,让文章获得系统推荐 • ⤴️ 分享,把内容传递给身边的伙伴 • ❤️ 推荐,让文章影响到更多人 • 👏 欢迎留言交流,一起拓展技术的边界

👇👇👇 Follow me,获取更多高质量干货分享,我们下期再见!