如何高效遍历Pandas DataFrame以创建自定义对象?
高效从Pandas DataFrame批量创建自定义Node对象的问题
背景
我有一个从SQL数据库加载的Pandas DataFrame,需要为每一行构造一个自定义的Node对象。最初尝试用df.apply实现,但测试发现速度极慢,因此想找到最快的实现方案。
测试设置
为对比不同实现的性能,我搭建了测试环境,具体设置如下:
- 编写多个函数,统一以DataFrame为输入,输出Node对象列表
- 固定随机种子,确保所有测试函数使用完全相同的输入DataFrame
- 构造不同规模的DataFrame,行数N取2、4、8…32768等递进值
- 测试时调用
create_node或create_node_ignored_args生成对象,需注意DataFrame列顺序与函数参数顺序不匹配,必须通过列查询(如指定LOOKUP列列表)正确传递参数,否则会生成错误的Node对象
测试结果
针对两种典型场景测试后,得到以下结果:
- 大DataFrame + 低迭代次数:性能最优的实现包括
zip_comprehension_np_values_lookup、zip_comprehension_lookup等 - 小DataFrame + 高迭代次数:除上述实现外,
to_numpy_take也表现出最优性能
疑问
- 是否存在业界通用的高效批量创建自定义对象的方法?
- 我目前找到的「先查询目标列,再用zip打包后批量生成对象」的方式,是否是当前的最优解?
- 为什么
df.apply(lambda row: create_node(*row[LOOKUP]), axis=1)会是最慢的实现之一?
内容的提问来源于stack exchange,提问作者Atheuz
相关产品推荐
相关产品推荐

