是否存在与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
相关产品推荐
相关产品推荐

