利用Python数据分析:数据规整化(二)

本文详细介绍了Python中DataFrame的合并与连接操作,包括使用`pd.merge()`进行合并,`left_on`、`right_index`参数的应用,外连接方式,层次化索引的处理,以及`join()`方法的使用。还涵盖了`pd.concat()`函数在行与列上的连接,以及如何处理不同索引的Series和DataFrame。示例中展示了各种场景下的数据合并与连接方法。

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

left1 = DataFrame({'key':['a','b','a','a','b','c'],
                   'value':range(6)})
right1 = DataFrame({'group_val':[3.5,7]},index=['a','b'])
pd.merge(left1,right1,left_on='key',right_index=True) # 两者相合并,左边以key为关键字,右边以索引为关键字
pd.merge(left1,right1,left_on='key',right_index=True,how='outer') # 指定外链接的方式得到他们的并集
# 层次化的索引
lefth = DataFrame({'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
                   'key2':[2000,2001,2002,2001,2002],
                   'data':np.arange(5.0)})
righth = DataFrame(np.arange(12).reshape((6,2)),
                   index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],
                          [2001,2000,2000,2000,2001,2002]],
                   columns=['event1','event2'])
lefth
righth
pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True) # 以列表的形式指明用作合并键的多个列
pd.merge(lefth,righth,left_on=['key1','key2'],
         right_index=True,how='outer')
left2 = DataFrame([[1,2],[3,4],[5,64]],index=['a','c','e'],
                  columns=['Ohio','Nevada'])
right2 = DataFrame([[7,8],[9,10],[11,12],[13,14]],
                   index=['b','c','d','e'],columns=['Missouri','Alabama'])
left2
right2
pd.merge(left2,right2,how='outer',left_index=True,right_index=True) # 同时使用双方的索引合并
# Dataframe 有一个join的实例方更方便的按照索引合并
left2.join(right2,how='outer')
left1.join(right1,on='key') # join 方法是在连接键上做的是左链接
another = DataFrame([[7.,8.],[9.,10],[11.,12.],[16.,17]],
                    index=['a','c','e','f'],columns=['New York','Oregon'])
left2.join([right2,another])
left2.join([right2,another],how='outer') # 可以向join传入一组Dataframe进行合并
# 轴向连接
arr = np.arange(12).reshape((3,4))
arr
np.concatenate([arr,arr],axis=1) # 根据行相连接
s1 = Series([0,1],index=['a','b'])
s2 = Series([2,3,4],index=['c','d','e'])
s3 = Series([5,6],index=['f','g']) # 建立三个索引不同的Series
pd.concat([s1,s2,s3]) # 调用这些对象可以将索引黏合在一起 默认情况下是在axis = 0上工作
pd.concat([s1,s2,s3],axis=1) # axis = 1是列
s4 = pd.concat([s1*5,s3])
pd.concat([s1,s4],axis=1)
pd.concat([s1,s4],axis=1,join='inner') # 取他们的交集
pd.concat([s1,s4],axis=1,join_axes=[['a','c','b','e']]) # 通过join_axes指定其他轴上使用的索引
result = pd.concat([s1,s1,s3],keys=['one','two','three']) # 在连接轴上创造一个层次化的索引
result.unstack()
pd.concat([s1,s2,s3],axis=1,keys=['one','two','three']) # 沿着axis = 1对Series进行合并,keys就会成为dataframe的列头
df1 = DataFrame(np.arange(6.).reshape(3,2),index=['a','b','c'],
                columns=['one','two'])
df2 = DataFrame(5+np.arange(4).reshape(2,2),index=['a','c'],
                columns=['three','four'])
pd.concat([df1,df2],axis=1,keys=['level1','level2']) # 同样的逻辑对dataframe也一样
pd.concat({'level1':df1,'level2':df2},axis=1)# 传入一个字典,字典的键就会被当做keys的选项值
pd.concat([df1,df2],axis=1,keys=['level1','level2'],names=['upper','lower']) # 对层次化索引命名
df1 = DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
df2 = DataFrame(np.random.randn(2,3),columns=['b','d','a'])
df1
df2
pd.concat([df1,df2],ignore_index=True) # 这种情况传入ignore_index=True即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值