(19)pandas合并

文章介绍了Pandas库中的数据合并方法,包括基础概念,如找到相同的key字段进行合并,以及一对一、多对一、多对多的合并策略。还讨论了当字段存在多个相同项或不存在匹配项时的处理方式,以及如何使用drop()删除列和how参数来选择不同的合并类型(内合并、外合并、左合并和右合并)。
摘要由CSDN通过智能技术生成

内容:

·基础概念

·一对一合并

·多对一合并

·多对多合并

·当字段存在多个相同项时

·当字段不存在匹配项时

·删除列/行drop()

·how参数

【基础概念】

在内容上存在对应关系

(1)找到相同的key字段

(2)进行该列元素的匹配

(3)合并

函数:merge()只能用于两个表的左右拼接

在进行操作之前,需要导入五个表格:

table_1 = pd.read_excel("C:/Users/YHT/Desktop/表1.xlsx", sheet_name="1", header=0, index_col=0)
table_2 = pd.read_excel("C:/Users/YHT/Desktop/表1.xlsx", sheet_name="2", header=0, index_col=0)
table_3 = pd.read_excel("C:/Users/YHT/Desktop/表1.xlsx", sheet_name="3", header=0, index_col=0)
table_4 = pd.read_excel("C:/Users/YHT/Desktop/表1.xlsx", sheet_name="4", header=0, index_col=0)
table_5 = pd.read_excel("C:/Users/YHT/Desktop/表1.xlsx", sheet_name="5", header=0, index_col=0)
print(table_1)
print()
print(table_2)
print()
print(table_3)
print()
print(table_4)
print()
print(table_5)
print()

运行结果

【一对多合并】

        如果需要拼接的两个表中,有相同的列信息,那么进行拼接的时候即使不指定以哪个字段作为主键,函数也会默认用信息相同的列做主键对两个表进行拼接,同时会将该列未匹配的元素行删除,如下例:

"""一对一合并"""
# 如果需要拼接的两个表中,有相同的列信息,那么进行拼接的时候即使不指定以哪个字段作为主键,函数也会默认用信息相同的列做主键对两个表进行拼接,同时会将该列未匹配的元素行删除,如下例:
print("table_1和table_2级联:\n", pd.concat(objs=(table_1, table_2), axis=0))
print("table_1和table_2合并:\n", pd.merge(table_1, table_2))
print()

运行结果

【一对多合并】

"""多对一合并"""
print("table_1和table_3合并:\n", pd.merge(table_1, table_3))
print()

运行结果

 【多对多合并】

默认:

(1)把字段相同的列作为合并的依据;

(2)默认如果有多个列的标签相同,则会同时参考多列合并;

"""多对多合并"""
# 默认(1)把字段相同的列作为合并的依据,(2)默认如果有多个列的标签相同,则会同时参考多列合并
print("table_3和table_4合并:\n", pd.merge(table_3, table_4))
print()

运行结果

 【当字段存在多个相同项】

使用on=显式指定那一列为key,当有多个key相同时使用;

根据suffixes的传入参数,可以给表格中相同的key添加后缀;

"""key的规范化"""
# 使用on=显式指定那一列为key,当有多个key相同时使用
# 根据suffixes的传入参数,可以给表格中相同的key添加后缀
print("table_3和table_4合并:\n", pd.merge(table_3, table_4, on="手机型号"))
print("table_3和table_4合并:\n", pd.merge(table_3, table_4, on="手机型号", suffixes=("_上半年", "_下半年")))
print()

运行结果

 【当字段不存在匹配项】

left_on:左表被指定的key

right_on:右表被指定的key

"""当key(列字段)不相等时合并"""
# left_on:左表被指定的key
# right_on:右表被指定的key
things_1 = pd.merge(table_1, table_5, left_on="手机型号", right_on="型号")
print("table_1和table_5合并:\n", things_1)

运行结果

 【删除列/行drop】

labels=,传入参数为列表,列表元素为被删除的行/列标签

默认删除行,axis=0

"""删除列/列drop"""
# ;labels=,传入参数为列表,列表元素为被删除的行/列标签
# 默认删除行,axis=0
things_2 = things_1.drop(labels=["型号"], axis=1)
print(things_2)
print()

运行结果

 【how参数】

在合并时,how默认参数为inner,也就是内合并;

merge(合并):只保留相同的【内容】;

concat(级联):只保留相同的【标签】;

保留交集:how="inner";

保留并集:how="outer";

左表为主表:how="left";

右表为主表:how="right";

"""how参数"""
# 在合并时,how默认参数为inner,也就是内合并
# merge(合并):只保留相同的【内容】
# concat(级联):只保留相同的【标签】
# 保留交集:how="inner"
# 保留并集:how="outer"
# 左表为主表:how="left"
# 右表为主表:how="right"
print("table_1和table_2合并(保留交集):\n", pd.merge(table_1, table_2, how="inner"))
print("table_1和table_2合并(保留并集):\n", pd.merge(table_1, table_2, how="outer"))
print("table_1和table_2合并(左表为主表):\n", pd.merge(table_1, table_2, how="left"))
print("table_1和table_2合并(右表为主表):\n", pd.merge(table_1, table_2, how="right"))
print()

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弦之森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值