【Python系列专栏】第六十七篇 Python中 Pandas 合并数据集

8.2 合并数据集

​ pandas对象中的数据可以通过一些方式进行合并:

  • pandas.merge根据一个或多个键将不同DataFrame中的行连接起来。(它实现的就是数据库的join操作)。
  • pandas.concat可以沿着一条轴将多个对象堆叠到一起。
  • combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象中的缺失值。

8.2.1 数据库风格的DataFrame合并

​ 数据集的合并连接运算是通过一个或多个键将行链接起来的。

​ pandas的merge函数是主要切入点。

merge函数,如果没有指定用哪个列进行连接,就会将重叠列的列名当作

pd.merge(df1,df2,on='key')

​ 如果两个对象的列名不同,可以分别指定。

#使用left_on,right_on
pd.merge(df1,df2,left_on='data1',right_on='data2')

merge做的是“内连接”,结果中的键是交集外连接求取的是键的并集,组合了左连接和右连接的效果。例如:

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

​ 两个对象中缺失的值表示为NaN。

how的选项:

在这里插入图片描述

​ 上面是多对一的情况,多对多连接产生的是行的笛卡尔积

​ 对于合并运算需要考虑的一个问题是对重复列名的处理merge有一个suffixes选项,用于指定附加到左右两个DataFrame对象的重叠列名上的字符串。

merge函数的参数:


8.2.2 索引上的合并

​ 当DataFrame中的连接键位于其索引中,可以传入left_index=True或right_index=True(或两个都传),以说明索引应该被用作连接键

​ 例如:

pd.merge(left1,right1,left_on='key',right_index=True,how='outer')

​ 对于层次化索引的数据,索引的合并默认是多键合并:

lefth=pd.DataFrame({'key1':['ohio','ohio','ohio','nevada','nevada'],
                   'key2':[2000,2001,2002,2001,2002],
                   'data':np.arange(5.)})
righth=pd.DataFrame(np.arange(12).reshape((6,2)),index=[['nevada','nevada','ohio','ohio','ohio','ohio'],
[2001,2000,2000,2000,2001,2002]],
                   columns=['event1','event2'])         

pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True,how='outer')

在这里插入图片描述

join方法:实现按索引合并;可用于合并多个带有相同或相似索引的DataFrame对象,但要求没有重叠的列。DataFrame的join方法默认使用的是左连接保留左边表的行索引

left1.join(right1,on='key')


8.2.3 轴向连接

​ 另一种数据合并运算,也被称作连接、绑定、堆叠。

​ 1. NumPy的concatenation函数可以用NumPy数组实现。

​ 例如:

arr=np.arange(12).reshape((3,4))
#沿轴1连接
np.concatenate([arr,arr],axis=1)

在这里插入图片描述

​ 即,将两个矩阵沿轴进行连接。

​ 2. pandas的concat函数可以实现数组的连接运算。

concat是在axis=0上工作的,产生一个新的Series。如果传入axis=1,结果会变成一个DataFrame。


8.2.4 合并堆叠数据

​ 对于有索引全部或部分堆叠的两个数据集。

用传递对象中的数据为调用对象的缺失数据”打补丁“。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mrrunsen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值