Python(Pandas)新增计算列的性能影响探究
高效处理Pandas DataFrame列的几种方案
看你正在深耕机器学习底层原理而非停留在操作层面,这个方向真的很赞!针对你提到的预处理income-class列的需求,确实有不少比自定义calculate函数更高效的矢量化方法,既能提升处理速度,也更贴合Pandas/Numpy的设计逻辑,甚至能实现你想要的“即时处理”直接用于可视化。
下面是几个实用的解决方案:
1. Numpy矢量化判断(适配简单分支逻辑)
Numpy的where函数是矢量化操作的代表,它会一次性对整个数组完成判断,比逐行apply效率高得多,大数据集下优势尤其明显:
import numpy as np # 这里假设else分支返回200,你可以根据实际需求修改 df['calculated_col'] = np.where(df['income-class'] == '<=50K', 100, 200)
如果是多分支复杂逻辑,还可以嵌套np.where,或者用np.select来定义多个条件与对应结果。
2. Pandas字典映射(适合明确的键值对应关系)
如果income-class只有固定的几个类别,用字典映射的方式更直观,代码可读性也更强:
income_mapping = { '<=50K': 100, '>50K': 200 # 补充你的其他类别映射规则 } df['calculated_col'] = df['income-class'].map(income_mapping)
要是存在未匹配的类别,还可以用.fillna()来兜底处理,比如.map(income_mapping).fillna(0)。
3. 即时处理直接用于可视化
如果不需要把处理后的列保存到DataFrame里,完全可以在Matplotlib调用时直接处理数据,实现“即时处理”:
import matplotlib.pyplot as plt # 直接在绘图参数中生成处理后的数据,无需额外存列 plt.bar( x=df.index, height=np.where(df['income-class'] == '<=50K', 100, 200) ) plt.show()
额外小提示
这些方法的核心都是矢量化操作——避免逐行循环或apply,而是利用Numpy/Pandas底层的C实现批量处理数据。理解矢量化的原理不仅能提升数据处理效率,对你后续深入TensorFlow也大有裨益,因为TensorFlow的计算逻辑同样依赖矢量化的张量操作,本质逻辑是相通的。
内容的提问来源于stack exchange,提问作者Martin Horvath
相关产品推荐
相关产品推荐

