真正的python pandas模块实现SQL-jion连接的方法。关键在indicator参数。

有好几次想要用python实现SQL的join查询功能,找了好多教程,都没有给出完整的sql 中 七种经典join查询。而且有的博客给出的merge参数也不完整。对于未查过模块原文档的同学真是挠头。

正常的inner outer left right 四种表连接查询都很容易理解,关键在于左连接只包含左表,右链接只包含右表两种查询需求,而merge中的indicator参数返回结果,就可以轻松实现了。

需要注意代码中给出的并非最终查询结果,最好伪代码和注释有提到,需要对’_merge’ 进行筛选判断。
both表示左右表共有的,
left_only
right_only 如同译文的意思。可以找几个真实案例感受下,也是很好用。

寄代码、图如下。有问题可以讨论哦…

import numpy as np
import pandas as pd 

sst = 'abcdefghiuvwxyzsdfd'
cola = []
for i in sst:
    cola.append(i)

np.random.seed(10)
x1 = np.random.randint(1,100,len(cola))

colb = list(set(cola))
x2 = np.random.randn(len(colb))*10

data01 = pd.DataFrame({'type':cola,
                      'val1':x1})
data02 = pd.DataFrame({'type':colb,
                      'val2':x2})


df1 = pd.merge(data01,data02,left_on='type',right_on='type' ,how='inner',indicator=True,)
# SQL 中的 join 查询。交集
print(len(df1))

df2 = pd.merge(data01,data02,left_index=True,right_index=True ,how='left',indicator=True,)
# SQl 中的 left join  where right_index  is null,同于df2[df2['_merge'] == ‘both’]
print(len( df2[df2['_merge'] == 'both'] ))

df3 = pd.merge(data01,data02,left_index=True,right_index=True ,how='right',indicator=True,)
# SQl 中的 right join where left_index is null, 同于df3[df3['_merge'] == 'both']
print(len( df3[df3['_merge'] == 'both'] ))

output:
19
16
16

df1输出结果:
等同于SQL 的 inner join 查询结果
在这里插入图片描述

df2输出结果:
df2._merge == ‘both’
等同于SQL 的 left join where b.col is null
在这里插入图片描述

df3输出结果:
等同于SQL 中的 right join where a.col is null
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonpandas模块是一个开源的数据分析和数据处理工具,它提供了高效、灵活和便捷的数据结构,例如Series和DataFrame,以及各种数据操作功能。 在pandas模块中,Series是一种一维标签数组,可以存储任意类型的数据,并且可以通过索引进行访问和操作。可以使用pandas.Series()函数创建一个空的Series对象。 pandas模块还支持多种数据类型的读取和处理。例如,可以使用pandas.read_html()函数读取HTML文件中的数据,使用pandas.read_json()函数读取JSON文件中的数据,使用pandas.read_csv()函数读取CSV文件中的数据。这些函数可以将读取的数据转换为DataFrame对象,方便进行进一步的数据处理和分析。 总结来说,pandas模块Python中一个功能强大且广泛应用于数据分析和数据处理的模块,它提供了丰富的数据结构和操作功能,使得数据的读取、处理和分析变得更加简单和高效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python pandas模块](https://blog.csdn.net/weixin_48994367/article/details/124848794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Python模块学习】pandas模块简介](https://blog.csdn.net/weixin_46684578/article/details/121172727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值