是我太菜了,还是 pandans 就是这么慢

查看 188|回复 22
crackidz   
你这速度明显是使用问题了...
1462326016   
每次循环都要重新遍历六千次,不可能快吧。把六千行那个 excel 的前三列和需要的数据做成 dict ,直接遍历四千行的那个 get 一下 dict ,一次完事,复杂度 O(1)
算下来都不需要 pandas 吧,如果不会用 excel 读写相关库当我没说,好像好多人习惯用 pandas 读取 excel 。
我习惯用 openpyxl 之类的读取 excel
aka863   
建议使用 pandas.DataFrame.set_index(),把 DataFrame 的前 3 列设置为 MultiIndex ,再使用 pandas.DataFrame.join()。
gauthier   
你这数据量理论上应该是秒算完,就算是导出成 excel 也不会花太久。用 cProfile 看看时间耗费在哪了,找找有没有 pandas 自己的 api 调用
aka863   
不建议用逐行遍历、比较的方法,
那样的话,还不如在循环中用 python 的字典数据。
sgld   
大概率代码问题,问题描述其实没太看明白,但是 pandas 中逐行遍历是效率最低的一种做法。可以考虑能不能使用矢量化的方法替代,没有代码也不清楚。
stackoverflow 中有很多这方面的回答,可以去看看。
sgld   
问题中提到 tb6k 后面第 5 8 10 行的内容赋值给 tb4k 后三列。这里是不是 5 8 10 列
打错了的话,就两个表格 join 一下(前面有回答提到了),然后使用索引取需要的列。
如果不是别无他法,遍历都是最次选,实在不行考虑 aplly 这些🤩
sgld   
@sgld apply
ddkk1112   
打了一堆又删了
你还是让 gpt 帮你写吧
ipwx   
你代码呢?
首先,python 不能用 for loop 。
其次,pandas 稍微一点细节,性能差别就很大。比如
* .loc 或者直接索引比 .iloc 慢很多。
* .iteritems() 可能比 .itertuples() 慢。
* 不要按行取数据,因为 Pandas 是按列存的。你取出一行就有一行的临时对象。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部