Pandas中concat、merge方法的参数详细介绍及示例程序展示

本文详细介绍了Pandas中concat和merge方法的参数及其使用,包括axis、join、ignore_index、on、left_on、right_on、suffixes等,并通过多个示例展示了它们在数据拼接和合并中的应用。同时,探讨了validate和sort参数的作用,以及indicator如何指示合并情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:https://blog.youkuaiyun.com/guofei_fly/article/details/85455813

说明:
行方向连接,也称纵向连接,增加行,此时axis = 0或 axis = ‘index’;
列方向连接,也称横向连接,增加列,此时axis = 1或 axis = ‘column’。

方法 简介 调用方法
concat() 提供行方向和列方向进行内联或外联的拼接操作 pd.concat([df1, df2])
merge() 提供类似于SQL数据库中的join连接功能,支持左联、右联、内联和外联等全部四种SQL连接操作类型 pd.merge(df1,df2) 或 df1.merge(df2)
append() 提供行方向的拼接操作 df1.append()
join() 提供列方向的拼接操作,支持左联、右联、内联和外联四种操作类型 df1.join()

1. concat方法

concat方法与SQL中的join不同,当axis = 0时,concat会保留所有行(可能丢失部分列);当axis = 1时,concat会保留所有列(可能会丢失部分行)。
而SQL中的join方法一般会指定on a.id = b.id等条件,筛选出来部分行。

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

参数列表:

axis

axis = 0:即axis = ‘index’,进行纵向连接(根据列名),增加行;
最后的行数一定等于几个子df的行数和;
axis = 1:即axis = ‘columns’,进行横向连接(根据索引标签),增加列;
最后的列数一定等于几个子df的列数和;

join

join=‘outer’:当axis = 0时,列名相同的列会合并,其余列都保留,空值填充;
join=‘inner’:当axis = 0时,列名相同的列会合并,其余列都舍弃.

ignore_index

ignore_index=True:当axis = 0时,为True表示对行index重新编号。设为False有可能出现同名的行。

join_axes

自定义合并的轴。(既不用outer也不用inner)

1.1 测试参数axis、join和ignore_index

df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['id', 'name', 'class', 'score'],index=[0,1,2])
df2 = pd.DataFrame(np.ones((3, 4)) * 22, columns=['id', 'name', 'sex', 'address'],index=[2,3,4])
print(df1)
print(df2)

################# (axis='index', join='outer) ################
# axis='index': 纵连接(根据列名),增加行;
# 最后行数 = 两个表行数之和
# join='outer':列名相同的列会合并,其余列都保留,空值填充;
# 最后列数 = 两个表列数和 - 列名相同的列数
# ignore_index=True:对行索引重新编号,原索引会清除。设为False有可能出现同索引的行
print("-------------------- test 1 ---------------------")
res = pd.concat([df1, df2], axis='index', join='outer', ignore_index=True)
print(res)

################# (axis='index', join='inner) ################
# axis='index': 纵连接(根据列名),增加行;
# 最后行数 = 两个表行数之和;
# join='inner',列名相同的列会合并,其余列都舍弃;
# 最后列数 = 两个表中列名相同的列数;
print("-------------------- test 2 ---------------------")
res = pd.concat([df1, df2], axis='index', join='inner', ignore_index=True)
print(res)

################# (axis='columns', join='outer) ################
# axis='columns':进行横向连接(根据行的index标签),增加列;
# 最后列数 = 两个表列数和
# join='outer':index标签相同的行会合并,其余列都保留,空值填充.
# 最后行数 = 两个表行数和 - 列名相同的列数
# ignore_index=True:对列名重新编号,原列名会清除。设为False有可能出现同名的列
print("-------------------- test 3 ---------------------")
res = pd.concat([df1, df2], axis='columns', join='outer', ignore_index=True)
print(res)

################# (axis='columns', join='inner) ################
# axis='columns':进行横向连接(根据行的index标签),增加列;
# 最后列数 = 两个表列数和;
# join='inner':  index标签相同的行会合并,其余列都舍弃;
# 最后行数 = 两个表列名相同的列数;
# ignore_index=True:  对列名重新编号;
print("-------------------- test 4 ---------------------")
res = pd.concat([df1, df2], axis='columns', join='outer', ignore_index=True)
print(res)

运行结果:

    id  name  class  score
0  0.0   0.0    0.0    0.0
1  0.0   0.0    0.0    0.0
2  0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值