python之数据的合并和重塑

本文介绍了使用pandas在Python中进行数据合并和重塑的方法。包括利用merge、concat和combine_first进行数据融合,以及stack、unstack和pivot进行数据重塑。通过实例代码详细解析了这些操作的具体应用。

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

一、数据的合并

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

  • pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的连接操作。
  • pandas.concat可以沿着一条轴将多个对象堆叠到一起。
  • 实例方法combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象中的缺失值。

1.1 merge函数和join函数

相关代码

from pandas import DataFrame
import pandas as pd
#多对一:“多”指的是df1,df1中有多个被标记为a和b的行;“一"指的是df2,df2中key列每个值只对应一行
#两对象存在相同列名时:
df1=DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)})
df2=DataFrame({'key':['a','b','d'],'data2':range(3)})
#没有指定用哪一列进行连接,merge会按照重叠列的列名当键
m1=pd.merge(df1,df2)
#但,最好显式指定一下:
m2=pd.merge(df1,df2,on='key')
#利用join函数
#数据内容与m1/m2相同,但索引与data1相同,这是因为连接方式默认是'left'因此索引与data1一一对应
df1.join(df2.set_index('key'),on='key',how='inner') 
#从结果可以看出:c和d以及与之相关的数据都不见了,
#这是因为merge时,默认做的是'inner'连接,结果中的键是交集
#还有'outer','left','right'方式
m3=pd.merge(df1,df2,how='outer')
"""
df1:                       df2:                m1/m2:                       m3:
       data1 key       data2 key           data1 key  data2            data1 key  data2
0      0   b        0      0   a        0      0   b      1         0    0.0   b    1.0
1      1   b        1      1   b        1      1   b      1         1    1.0   b    1.0
2      2   a        2      2   d        2      6   b      1         2    6.0   b    1.0
3      3   c                            3      2   a      0         3    2.0   a    0.0
4      4   a                            4      4   a      0         4    4.0   a    0.0
5      5   a                            5      5   a      0         5    5.0   a    0.0
6      6   b                                                        6    3.0   c    NaN
                                                                    7    NaN   d    2.0
"""
#当两对象不存在相同列名时,可以进行分别指定:
df3=DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})
df4=DataFrame({'rkey':['a','b','d'],'data2':range(3)})
m4=pd.merge(df3,df4,left_on='lkey',right_on='rkey')
"""
df3:                       df4:                                 m4:
       data1 lkey       data2 rkey                       data1 lkey  data2  rkey
0      0   b        0      0   a                    0   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值