使用Python实现SQL中的join和union操作

0.初始数据框架

# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
                    'name':['marry','tina']})

print('df1的数据框架为:\n',df1)
print('df2的数据框架为:\n',df2)
print('df3的数据框架为:\n',df3)

1. join

用merge实现 left join、inner join 等操作。

merge函数是Pandas库中的函数,它用于根据一个或多个键合并两个DataFrame对象的行。

        参数on:用于连接的列名,必须在两个DataFrame中都存在。
        参数how:连接方式,可以是'left'、'right'、'outer'或'inner'

代码实现:

import pandas as pd

# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
                    'name':['marry','tina']})

# 使用merge实现left join
print('inner join实现:')
result = df1.merge(df2, on='id', how='left')
print(result)

# 使用merge实现inner join
print('inner join实现:')
result = df1.merge(df3, on='id', how='inner')
print(result)

# outer join和right join同理,不再演示

运行结果:

2.union all和union

用pandas库的concat函数实现数据集合并,

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

参数说明:
        objs:要连接的对象列表,可以是 DataFrame、Series 或者这些对象的序列。必须指定。
        axis:指定连接的轴。默认是 axis=0,表示在竖向上拼接(结果会变长)。如果 axis=1,表示在横向上进行拼接(结果会变宽)。
        join:指定拼接方式。join='outer':取并集,即所有数据都会取到,缺失值用 NaN 填充。join='inner':使用交集的列,丢弃非交集的行或列,即过滤掉NaN的数据。
        ignore_index:如果为 True,重新计算索引,索引连续。
        keys:用于创建层次化索引的标签数组。传递一个列表,用于创建层次化索引。如果传递了 keys,将创建 MultiIndex。
        levels:指定用作层次化索引的各级标签。
        names:指定用作层次化索引各级的名称。
        verify_integrity:如果为 True,检查结果对象的新轴是否重复。如果发现重复,则引发异常。
        sort:如果为 True,将在连接轴上对结果进行排序。默认为 False,这样可以更好地维护元素的顺序。
        copy:如果为 False,避免复制对象数据。默认为 True,即复制数据。

代码实现:

import pandas as pd

# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
                    'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
                    'name':['marry','tina']})

# 使用concat实现union all
print('union all结果:')
result = pd.concat([df1, df3], ignore_index=True)  # concat用于合并两个DataFrame。ignore_index=True参数确保结果DataFrame的索引是重新计算的
print(result)


# 使用concat实现union
print('union结果:')
result = pd.concat([df1, df3], ignore_index=True).drop_duplicates()  # drop_duplicates去重。
print(result)

运行结果:

扩展:

‌‌drop_duplicates()方法:
drop_duplicates()是‌Pandas库中的一个函数,它的作用是从‌DataFrame中删除重复的行,用于处理数据分析时遇到的重复数据问题。
drop_duplicates()方法的语法包括三个主要参数:‌

        subset(指定用于检测重复的列,默认为所有列)、

        keep(指定保留重复行的方式,可以是'first'、'last'或False,分别表示保留第一次出现的重复行、保留最后一次出现的重复行或删除所有重复行)

        inplace(一个布尔值,表示是否在原地修改DataFrame或返回一个新的DataFrame)

3.总结

concat相当于SQL中的union和union all,用于将数据集进行拼接。比如两个客户表的数据需要合并到一起,相当于竖向拼接,此时用axis=0。如果一个表存客户姓名,另一个表存客户年龄,此时用横向拼接,即axis=1。而join='inner'或join='outer'则控制的是拼接时对于没有完全对应上的列是否需要保留,inner取交集不保留,outer取并集保留。

merge相当于SQL中的各种join关联操作,根据某个key值将数据关联起来方便后续的分析处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值