Pandas DataFrame循环append不生效且计数缺失,如何正确追加数据?
问题解决:Pandas DataFrame循环追加数据失败的修正方案
原有代码的核心问题
- 变量定义错误:代码中
lst = [no, lst]存在循环引用,首次运行时lst还未完成赋值就被调用,且你实际要存入的是tt变量的值,此处属于笔误 - 追加格式错误:直接传入一维列表给
append方法会将列表内的每个元素拆分为单独行,无法生成你需要的「一行两列」的结构 - API废弃问题:Pandas 2.0及以上版本已经完全移除了
DataFrame.append方法,旧版本也早已将该方法标记为废弃,官方推荐使用pd.concat完成拼接操作
最优实现(无循环,性能最高)
Pandas不推荐循环逐行追加数据,会产生大量额外开销,建议先把所有数据整理为列表后一次性转为DataFrame:
import pandas as pd # 直接生成所有行数据 data = [[i, "ab"] for i in range(1, 10)] # 指定列名生成DataFrame df = pd.DataFrame(data, columns=["no", "tt"]) # 如果需要行索引从1开始可加下面这行 df.index = df.index + 1
必须使用循环的场景(如逐行处理复杂逻辑)
使用官方推荐的pd.concat完成逐行拼接:
import pandas as pd # 初始化时就指定列名 df = pd.DataFrame(columns=["no", "tt"]) for i in range(1, 10): no = i tt = "ab" # 生成单行DataFrame后拼接 single_row = pd.DataFrame([[no, tt]], columns=["no", "tt"]) df = pd.concat([df, single_row], ignore_index=True) # 调整行索引从1开始 df.index = df.index + 1
运行后输出结果和你预期一致:
no tt 1 1 ab 2 2 ab 3 3 ab 4 4 ab 5 5 ab 6 6 ab 7 7 ab 8 8 ab 9 9 ab
内容的提问来源于stack exchange,提问作者prog
相关产品推荐
相关产品推荐

