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

循环中Pandas DataFrame的append方法失效问题排查

问题原因与解决方案

核心问题1:DataFrame.append() 不会原地修改原对象

pandas 的 append() 方法不会直接修改原DataFrame,而是返回一个包含追加后数据的新DataFrame。你在循环中只调用了 new_data.append(df2),但没有把返回的新对象重新赋值给 new_data,所以原 new_data 始终没有变化。

哪怕是你单独执行的那段代码,df1.append(df2) 也只是返回了新的DataFrame,原 df1 其实并没有被修改——你在交互式环境中看到的结果只是方法返回的新对象,而非原 df1 的变化。

核心问题2:循环范围写法错误

range(len(5)) 是完全错误的写法:整数 5 没有长度属性,执行这段代码会直接抛出 TypeError: object of type 'int' has no len()。要实现循环5次,应该直接写 range(5)。

修正后的代码

方案1:修复append的赋值问题

import pandas as pd

new_data = pd.DataFrame({"a":[1, 2, 3, 4],
                         "b":[5, 6, 7, 8]})

# 修正循环范围,并且将append结果重新赋值
for i in range(5):
    df2 = pd.DataFrame({"a":[1, 2, 3],
                        "b":[5, 6, 7]})
    new_data = new_data.append(df2, ignore_index=True)

print(new_data)
print(f"最终行数:{len(new_data)}")  # 输出19,符合预期

注意:ignore_index=True 是为了重置索引,避免出现重复的索引值。

方案2:推荐使用 pd.concat()(pandas 2.0+ 已弃用append)

因为 DataFrame.append() 在pandas 2.0及以上版本已经被标记为弃用,更高效的方式是先收集所有要追加的DataFrame,再一次性用 pd.concat() 合并:

import pandas as pd

new_data = pd.DataFrame({"a":[1, 2, 3, 4],
                         "b":[5, 6, 7, 8]})

# 收集所有要追加的DataFrame
append_dfs = []
for i in range(5):
    append_dfs.append(pd.DataFrame({"a":[1, 2, 3], "b":[5, 6, 7]}))

# 合并原DataFrame和所有追加的DataFrame
new_data = pd.concat([new_data] + append_dfs, ignore_index=True)

print(new_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:45:29