DataFrame无append属性报错及pd.concat使用时NameError问题求助
解决两个Pandas代码错误
错误1:AttributeError: 'DataFrame' object has no attribute 'append'
- 根本原因:Pandas 2.0及以后版本彻底移除了
DataFrame.append()方法,该方法此前已被标记为弃用。 - 修正方案:用
pd.concat()替代,把要添加的单行数据转成DataFrame后和原表拼接。同时原代码里还有两个变量名错误要修正:- 循环遍历的变量是
day_row,但后续用了dr,需统一为同一个变量名 - 接收
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库。 - 解决步骤:
- 代码开头必须加
import pandas as pd,确保能调用Pandas的方法 - 检查所有调用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
相关产品推荐
相关产品推荐

