非索引匹配的Pandas DataFrame更新合并:用df1更新df2指定位置数据
操作实现方案
核心逻辑是通过pandas的位置索引选取df2的指定区间,直接赋值覆盖即可,为了避免索引对齐导致的异常,直接提取df1的数值数组进行赋值。
核心代码
# 从df2的索引383位置开始,替换对应长度的col_1列值 df2.iloc[383 : 383 + len(df1), df2.columns.get_loc("col_1")] = df1["col_1"].values
代码说明
- 用
iloc按绝对位置选取数据,不受df2本身自定义索引的影响,确保起始位置和替换范围准确 - 切片
383 : 383 + len(df1)刚好匹配df1的行数,保证所有df1的数值都能对应写入df2的指定区间 - 末尾加
.values提取df1列的numpy数组,跳过pandas的索引对齐逻辑,避免两个df索引不一致时出现空值 df2.columns.get_loc("col_1")是通过列名获取列的位置索引,比直接写列序号兼容性更好
可选操作:保留原始df2
如果你不想修改原始df2,可以先做深拷贝再操作:
import pandas as pd df2_updated = df2.copy(deep=True) df2_updated.iloc[383 : 383 + len(df1), df2_updated.columns.get_loc("col_1")] = df1["col_1"].values
结果验证
替换完成后可以执行以下代码对比验证:
print(df1["col_1"].head(10).equals(df2.iloc[383:393, df2.columns.get_loc("col_1")])) # 返回True即说明替换正确
内容的提问来源于stack exchange,提问作者Nadila
相关产品推荐
相关产品推荐

