如何将双层for循环中的pandas append旧代码改写为pandas concat写法
替换pandas append为concat的实现方案
原有循环内反复调用append的写法性能极低,且append方法已在pandas 2.0+版本中正式弃用。最优优化方案是先收集所有待新增的行,最后一次性调用concat合并,和原有逻辑完全等价的实现代码如下:
import pandas as pd # 初始化空列表存储所有待新增的行 new_rows = [] for y in range(start_year+1, last_year+1): year = y for i in range(len(population0.index)): # 加copy避免修改原population中的数据,符合原代码的预期行为 new = population.loc[i].copy() new.loc['isum'] = 0 new.loc['year'] = year new.loc[men] = 0 new.loc[women] = 0 new_rows.append(new) # 一次性合并原有数据和所有新增行 population = pd.concat([population] + new_rows, ignore_index=True)
注意事项
- 新增的
.copy()是为了避免修改原population的源数据,如果你确认原有逻辑允许修改原数据可以删除,不影响最终合并结果 - 该写法的运行效率远高于循环内反复append,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者Juuso1
相关产品推荐
相关产品推荐

