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

pandas如何将列表内多条数据逐行追加到DataFrame中

原代码报错原因

你写的df.loc[5::6] = l_row运行失败的核心问题是切片逻辑错误:5::6代表从索引5开始、步长为6选取行,最终只会匹配到索引5这1个行位置,但你传入的l_row包含2条待插入数据,赋值时左右长度不匹配,自然报错。

下面提供3种可直接复用的多行追加实现,适配你当前的元组列表格式:


实现方案

方案1:pd.concat拼接(官方推荐,批量追加性能最优)

pandas 2.0+版本已经移除了旧的append()方法,目前官方最推荐用concat做批量行拼接,只需要把待追加的数据转成和原DataFrame列结构一致的临时表,再拼接即可:

# 将待追加的元组列表转为同列名的DataFrame
new_data = pd.DataFrame(l_row, columns=df.columns)
# 拼接两个表,ignore_index=True会自动重置连续索引
df = pd.concat([df, new_data], ignore_index=True)
# 如果需要保留你原来从1开始计数的索引,加一行重设即可
df.index = range(1, len(df)+1)

这个方法适合一次性追加多条数据的场景,性能比逐行插入高很多,不会出现索引错位问题。

方案2:loc逐行赋值(逻辑直观,适合少量数据)

你一开始用loc插入的思路是对的,不需要写复杂的步长切片,直接指定新行的索引位置赋值即可:

# 原表最后一行索引是4,新行直接指定索引5、6
df.loc[5] = l_row[0]
df.loc[6] = l_row[1]

如果不想手动数索引,或者待追加的行数不固定,可以用你提到的for循环实现,逻辑也很简单:

start_idx = len(df) + 1
for i, row in enumerate(l_row):
    df.loc[start_idx + i] = row

哪怕l_row里有几十上百条数据,这个循环都能正常运行。

方案3:loc批量赋值(无需循环,写法简洁)

只要保证你选取的新索引数量和待追加的行数一致,就可以直接批量赋值,不用写循环:

# 自动生成连续的新索引
new_idx = range(len(df)+1, len(df)+1+len(l_row))
# 选中新索引的所有列,批量传入待追加数据
df.loc[new_idx, :] = l_row

注意这里必须加: 指定选中所有列,否则会因为列匹配逻辑问题触发报错。


注意事项
  • 所有追加方法都要求传入的单行数据长度和原DataFrame的列数一致,且数据顺序和列顺序对应,否则会出现值错位、类型异常问题。
  • 如果待追加的数据存在缺列情况,pandas会自动给对应位置填充空值NaN。
  • 不要在新代码里使用已经被弃用的df.append()方法,避免pandas版本升级后代码无法运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:36:20