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

DataFrame无append属性报错及pd.concat使用时NameError问题求助

解决两个Pandas代码错误

错误1:AttributeError: 'DataFrame' object has no attribute 'append'

  • 根本原因:Pandas 2.0及以后版本彻底移除了DataFrame.append()方法,该方法此前已被标记为弃用。
  • 修正方案:用pd.concat()替代,把要添加的单行数据转成DataFrame后和原表拼接。同时原代码里还有两个变量名错误要修正:
    1. 循环遍历的变量是day_row,但后续用了dr,需统一为同一个变量名
    2. 接收lma返回值用的是avlm, relm,但后续用了alm, ralm,变量名不匹配

修正后的代码片段:

import pandas as pd

# 先确保ndf是预先初始化的空DataFrame,比如:
# ndf = pd.DataFrame(columns=['od', 'fc', 'tc', 'r', 'per', 'mer'])

for idx, dr in ecurr.iterrows():  # 统一变量名为dr
    avlm, relm = lma(dtd, dr['fc'], dr['tc'], dr['od'])  # 正确接收返回值
    # 把单行数据转为DataFrame
    new_row = pd.DataFrame({
        'od': [dr['od']],
        'fc': [dr['fc']],
        'tc': [dr['tc']],
        'r': [dr['r']],
        'per': [avlm],
        'mer': [relm]
    })
    ndf = pd.concat([ndf, new_row], ignore_index=True)  # 拼接并重新赋值给ndf

错误2:NameError: name 'p' is not defined

  • 原因:要么是你写pd.concat()时手滑写成了p.concat(),要么是代码开头没正确导入Pandas库。
  • 解决步骤:
    1. 代码开头必须加import pandas as pd,确保能调用Pandas的方法
    2. 检查所有调用Pandas的地方,必须用pd.开头,别写成p.

额外优化建议

循环里逐行拼接DataFrame效率很低,建议先把所有要添加的行存进列表,最后一次性拼接,速度会快很多:

import pandas as pd

rows_list = []
for idx, dr in ecurr.iterrows():
    avlm, relm = lma(dtd, dr['fc'], dr['tc'], dr['od'])
    rows_list.append({
        'od': dr['od'],
        'fc': dr['fc'],
        'tc': dr['tc'],
        'r': dr['r'],
        'per': avlm,
        'mer': relm
    })
# 最后一次性合并
ndf = pd.concat([ndf, pd.DataFrame(rows_list)], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:23:31