Pandas frame.append方法已弃用,如何更新循环内的concat语法?
用concat替代append解决pandas弃用警告
修改思路
原来循环里反复调用append会触发pandas 1.4+版本的弃用警告,且这种逐次拼接的方式效率偏低。正确的做法是先把所有需要合并的DataFrame收集到列表中,最后一次性用pd.concat完成合并。
修改后代码
# 初始化外层列表,存放每个数据库处理后的结果 outer_frames = [] for db in self.db_list: df_decoder = can_decoder.DataFrameDecoder(db) # 初始化内层列表,存放当前数据库下不同DataLength组的解码结果 inner_frames = [] for length, group in df_raw.groupby("DataLength"): df_phys_group = df_decoder.decode_frame(group) inner_frames.append(df_phys_group) # 合并内层所有结果并按索引排序 df_phys_temp = pd.concat(inner_frames).sort_index() outer_frames.append(df_phys_temp) # 合并外层所有结果,得到最终数据框 df_phys = pd.concat(outer_frames)
关键改动说明
- 替换空DataFrame初始化:用空列表替代空DataFrame来存储待合并的数据集,避免逐次拼接的性能损耗和警告
- 内层循环:把每次解码得到的
df_phys_group加入inner_frames,最后用pd.concat(inner_frames)替代循环调用append - 外层循环:将每个数据库处理完成并排序后的结果加入
outer_frames,最后一次性合并得到最终的df_phys - 如果需要重置合并后的索引,可以在
concat时添加ignore_index=True参数,原代码保留了索引排序逻辑,因此默认保持索引不变
内容的提问来源于stack exchange,提问作者mfcss
相关产品推荐
相关产品推荐

