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

使用Pandas在DataFrame指定位置添加行时原有行消失的问题

解决Pandas插入新行时覆盖原有行的问题

问题原因

你当前的代码是通过loc[index]或iloc[index]直接给指定位置赋值,这本质是替换该索引对应的原有行,而非在指定位置插入新行,所以才会出现原有行被覆盖消失的情况。

解决方案

要实现插入新行的需求,需要把目标DataFrame拆分为插入点前的部分、新行数据、插入点后的部分,再重新合并。推荐使用pd.concat方法,步骤如下:

  1. 构造新行的DataFrame
    先把要插入的5行数据整理成和final_table列名一致的DataFrame:
# 构造5行新数据,列数与final_table匹配
new_rows_data = [
    [2023] + [0]*17,
    ['I'] + [0]*17,
    ['II'] + [0]*17,
    ['III'] + [0]*17,
    ['IV'] + [0]*17
]
new_rows = pd.DataFrame(new_rows_data, columns=final_table.columns)
  1. 拆分并合并原有DataFrame
    假设你要在final_table_row_num + 91这一行之后插入新行,执行以下代码:
# 确定插入位置的行位置(基于顺序,不是标签)
insert_position = final_table_row_num + 91 + 1  # 在my_row行之后插入新行

# 拆分并合并DataFrame
final_table = pd.concat([
    final_table.iloc[:insert_position],  # 保留插入位置之前的所有行
    new_rows,                            # 插入新行数据
    final_table.iloc[insert_position:]   # 保留插入位置之后的原有行
], ignore_index=True)
  • 用iloc[:insert_position]按行位置选取数据,避免因行标签不连续导致的选行错误
  • ignore_index=True会重置合并后的行索引,避免出现重复或混乱的索引问题

关于原代码中my_row的处理

如果你是要插入my_row而非替换原有行,同样需要用上述逻辑:先把my_row转为单行DataFrame,再插入到指定位置,而不是直接用iloc[index] = my_row替换。示例:

# 把my_row转为单行DataFrame
my_row_df = pd.DataFrame([my_row.values], columns=final_table.columns)
# 在指定位置插入my_row
insert_my_pos = final_table_row_num + 91
final_table = pd.concat([
    final_table.iloc[:insert_my_pos],
    my_row_df,
    final_table.iloc[insert_my_pos:]
], ignore_index=True)

关键注意点

  • 明确**位置索引(iloc)和标签索引(loc)**的区别:如果final_table的行标签不是连续整数,必须用iloc按位置拆分,避免选行错误
  • 插入行后务必重置索引(ignore_index=True),否则后续操作容易出现索引冲突问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:55:26