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

是否存在与SQL MERGE语句功能类似的Pandas函数?

有没有和SQL MERGE功能类似的Pandas函数?

先看你提供的SQL MERGE示例场景:

create table t(
    k number primary key, 
    v varchar2(10)
);
insert into t(k, v) values(1, 'A');
insert into t(k, v) values(2, 'B');
insert into t(k, v) values(3, null);

create table t_new(
    k number primary key, 
    v varchar2(10)
);

insert into t_new(k, v) values(1, 'P');
insert into t_new(k, v) values(4, 'Q');
insert into t_new(k, v) values(5, null);
commit;

merge into t
using t_new
on  ( t_new.k = t.k )
when not matched then insert (k, v) values (t_new.k, t_new.v)
when matched then update set t.v = t_new.v;

执行后查询结果:

select k, v from t;

K   V
1   P
2   B
3   
4   Q
5   

结果说明

  • 键1的v被更新为t_new中的值,键3保持原null不变
  • 键2未匹配到t_new数据,保留原值
  • 键4、5从t_new插入到t中

Pandas没有直接对应MERGE的单一函数,但可以通过组合操作实现完全相同的逻辑:

import pandas as pd

# 构建对应SQL表的DataFrame
t = pd.DataFrame({'k': [1, 2, 3], 'v': ['A', 'B', None]}).set_index('k')
t_new = pd.DataFrame({'k': [1, 4, 5], 'v': ['P', 'Q', None]}).set_index('k')

# 1. 匹配主键更新已有行(对应SQL MERGE的WHEN MATCHED THEN UPDATE)
t.update(t_new)

# 2. 筛选t_new中未存在于t的行(对应SQL MERGE的WHEN NOT MATCHED THEN INSERT)
new_entries = t_new[~t_new.index.isin(t.index)]

# 3. 合并新行并排序
t = pd.concat([t, new_entries]).sort_index()

# 输出结果
print(t.reset_index())

执行结果与SQL完全一致:

k     v
0  1     P
1  2     B
2  3  None
3  4     Q
4  5  None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:25