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

Pandas:在不保留索引的情况下将DataFrame插入另一个DataFrame

在指定位置插入Pandas DataFrame的正确方法

我完全懂你遇到的困扰:想在某个指定索引位置把一个DataFrame插入另一个,结果用修改单值的方法(比如df.loc[index] = ...)根本不管用,反而Pandas会按照索引标签去匹配待插入DataFrame的值,完全不是插入行的效果。这是因为loc是基于索引标签进行操作的,而不是按位置插入,咱们换个思路就能解决。

核心解决方案:拆分原DataFrame再拼接

最稳妥的方式是把原DataFrame拆成插入位置前后两部分,然后用pd.concat()把「前半部分 + 待插入DataFrame + 后半部分」拼起来。这样就不会出现索引匹配的问题,完全按位置插入。

举个实际例子:

import pandas as pd

# 原DataFrame
df_main = pd.DataFrame({'Col1': [10, 20, 30], 'Col2': [100, 200, 300]})
# 要插入的小DataFrame
df_insert = pd.DataFrame({'Col1': [15], 'Col2': [150]})

# 指定插入位置:比如在原DataFrame的第2行(索引为1的位置之后,插入后成为第2行)
insert_position = 1

# 拆分+拼接
result_df = pd.concat([
    df_main.iloc[:insert_position],  # 取插入位置之前的所有行
    df_insert,                       # 插入的DataFrame
    df_main.iloc[insert_position:]   # 取插入位置之后的所有行
], ignore_index=True)  # ignore_index=True会重置索引,避免重复或混乱

运行后result_df的结果就是你想要的:

Col1  Col2
0    10   100
1    15   150
2    20   200
3    30   300

为什么你原来的方法不行?

当你尝试用df_main.loc[insert_position] = df_insert时,Pandas会把df_insert的索引标签和df_main的索引标签做匹配。比如如果df_insert的索引是0,而你要赋值的位置索引是1,Pandas找不到对应标签,就会把该行设为NaN;如果两者索引标签相同,那就是替换该行的值,而不是插入。这和你想要的「插入行」完全不是一个逻辑。

额外注意事项

  • 确保待插入的DataFrame和原DataFrame的列名完全一致,否则拼接后会出现缺失值列。
  • 如果不需要重置索引,可以去掉ignore_index=True,但可能会出现重复索引,后续操作要注意。
  • 如果插入的是多行DataFrame,这个方法同样适用,不需要修改代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:48