领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

几种常用Pandas数据合并处理与SQL的比较分析

nixiaole 2025-05-27 16:47:38 知识剖析 15 ℃

最近使用Pandas做些数据处理,涉及到多个DataFrame的合并操作。但Pandas中相关的concat、merge函数不是很好理解,所以对照数据库几种常用数据集连接SQL的写法进行比较和分析。

数据集纵向连接合并

SQL中使用union和union all来合并两个或多个 select 语句的结果集。

注意:前提是这两个结果集的列数量和名称都要一致。

区别:使用 union 连接时,会对重复数据行去重;而 union all 不会去重。

一、准备对照数据

1、准备如下2个数据表:df1和df2

2、相对应的准备如下2个DataFrame:df1和df2

二、运行结果比较

--union all
select * from df1 union ALL select * from df2
--union
select * from df1 union select * from df2
df=pd.merge(df1,df2,how='outer')
# 从merge函数运行效果来看,使用outer参数,会对合并后的数据去重,与union语句对应
df=pd.concat([df1,df2])
# 从concat函数运行效果来看,合并后是2个dataframe数据的堆叠,与union all语句对应

数据集左右连接合并

SQL中有3种常用连接:inner join、left join、right join

一、准备数据

1、准备如下2个数据表:df1和df2

2、相对应的准备如下2个DataFrame:df1和df2

二、运行结果比较

--inner join
select * from df1 inner join df2 on df1.A = df2.D 
--left join
select * from df1 left join df2 on df1.A = df2.D
--right join
select * from df1 right join df2 on df1.A = df2.D
#从运行结果来看,concat一般用于简单的数据堆叠
#所以主要使用merge函数来比较
df=pd.merge(df1,df2,left_on='A',right_on='D',how='inner')
# 从运行结果来看,与inner join(sql)结果一致。

将上述代码how参数值调成‘left’和‘right’,运行结果与 left join 和 right join (sql)结果一致。

根据上述运行结果,得到如下对照表:

SQL脚本

Pandas代码

select * from df1 union ALL select * from df2

df=pd.concat([df1,df2])

select * from df1 union select * from df2

df=pd.merge(df1,df2,how='outer')

select * from df1 inner join df2 on df1.A = df2.D

df=pd.merge(df1,df2,left_on='A',right_on='D',how='inner')

select * from df1 left join df2 on df1.A = df2.D

df=pd.merge(df1,df2,left_on='A',right_on='D',how='left')

select * from df1 right join df2 on df1.A = df2.D

df=pd.merge(df1,df2,left_on='A',right_on='D',how='right')

最近发表
标签列表