Pandas - 数据合并

        DataFrame数据合并主要使用merge()方法和concat()方法。

1.数据合并(merge()方法)

        Pandas模块的merge()进行数据合并时,两个DataFrame对象必须有相同的列。

        1.常规合并

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

        该示例中,编号是相同的,所以会将df2中“体育”作为新的一列加入到df1中。 

        2.通过索引合并

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,left_index=True,right_index=True)
print(df_merge)

        3.对合并数据去重 

         使用到how属性,就是让df1保留所有的行列数据,df2则根据df1的行列进行补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)
print(df_merge)
df_merge=pd.merge(df1,df2,on='编号',how='left')
print(df_merge)

        4.多对一的数据合并

        根据共有列中的数据进行合并,df2根据df1的行列进行补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '学生姓名':['明日同学','高猿员','钱多多']})

df2 = pd.DataFrame({'编号':['mr001','mr001','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130],
                    '时间':['1月','2月','1月']})

df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

        5.多对多的数据合并

        根据共有列中的数据进行合并,df2,df1相互补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr001','mr001'],
                    '体育':[34.5,39.7,38,33,35]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr003','mr003'],
                    '语文':[110,105,109,110,108],
                    '数学':[105,88,120,123,119],
                    '英语':[99,115,130,109,128]})

df_merge=pd.merge(df1,df2)
print(df_merge)

2.数据合并(concat()方法)

        1.相同字段的表首尾相连

dfs = [df1,df2,df3]
result = pd.concat(dfs)

        如果需要标记源数据来自于哪张表,可以使用:

        result = pd.concat(dfs, keys=['第一张表','第二张表','第三张表']) 

        2.横向表合并(行对齐)

        用于数据列名不一致,缺失的数据使用Nan填充 。其中axis=1代表行合并。

result = pd.concat([df1,df4],axis=1)

        3.交叉合并

        交叉合并需要加上join参数,如值为inner,结果为两张表的交集;如果值为outer,结果为两张表的并集。 

result = pd.concat([df1,df4],axis=1,join='inner')

        4.指定表对其数据(行对齐)

         如果指定参数join_axes,就可以指定根据哪张表来对齐数据。如下述代码,根据df4表对其,结果表的行术和df4的行术一致,在此基础上拼接df1表。

result = pd.concat([df1,df4],axis=1,join_axes[df4.index])

         ​​​​​​​

《python数据分析》p120

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值