You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何低改动修复pandas append方法弃用触发的FutureWarning

警告触发原因

你收到的警告是因为pandas自1.4.0版本起正式废弃DataFrame.append()方法,该方法会在后续版本中被完全移除,官方推荐使用pandas.concat()实现相同的行追加效果,替换时不需要修改原有代码的前置计算逻辑,仅调整追加行的调用代码即可。

最小改动替换方式

pandas.concat()的作用是拼接多个pandas对象,逐行追加时只需要先把待追加的字典格式行转为单行DataFrame,再和原DataFrame传入concat即可,原有ignore_index=True的参数逻辑完全不变。

  • 示例1修改后代码(仅替换append调用行,其余逻辑完全保留):
init_hour = pd.to_datetime('00:00:00')
orig_hour = init_hour+timedelta(days=1)
while init_hour < orig_hour:
   row = {'Hours': init_hour.time()}
   # 原代码: df = df.append(row, ignore_index = True)
   df = pd.concat([df, pd.DataFrame([row])], ignore_index=True)
   init_hour = init_hour + timedelta(minutes=60)
  • 示例2修改后代码(同样仅替换append调用行):
row2 = {'date': tmp_date, 'false_negatives': fn, 'total': total}
# 原代码: df2 = df2.append(row2, ignore_index = True)
df2 = pd.concat([df2, pd.DataFrame([row2])], ignore_index=True)
可选性能优化(不强制改动)

不管是原来的append还是上面逐行调用concat的写法,每次执行都会生成一个全新的DataFrame对象,循环行数较多时性能较差。如果愿意做极小的逻辑调整,可以先把所有待追加的行存在普通Python列表里,循环结束后一次性拼接,性能会有明显提升,且不会影响你原有生成每行数据的计算逻辑:

init_hour = pd.to_datetime('00:00:00')
orig_hour = init_hour+timedelta(days=1)
# 用普通列表收集待追加的行
append_rows = []
while init_hour < orig_hour:
   row = {'Hours': init_hour.time()}
   append_rows.append(row)
   init_hour = init_hour + timedelta(minutes=60)
# 一次性完成拼接
df = pd.concat([df, pd.DataFrame(append_rows)], ignore_index=True)

注意:这里列表调用的append()是Python原生列表的方法,和pandas的DataFrame.append无关,可以正常使用不会触发警告。

内容的提问来源于stack exchange,提问作者Carola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:09:20