开发者

Pandas数据合并的两种实现方法

开发者 https://www.devze.com 2023-11-28 09:16 出处:网络 作者: GarsonW
目录1.数据合并(merge()方法)1.常规合并2.通过索引合并3.对合并数www.devze.com据去重4.多对一的数据合并5.多对多的数据合并2.数据合并(concat()方法)1.相同字段的表首尾相连2.横向表合并(行对齐)3.交叉合并4.
目录
  • 1.数据合并(merge()方法)
    • 1.常规合并
    • 2.通过索引合并
    • 3.对合并数www.devze.com据去重
    • 4.多对一的数据合并
    • 5.多对多的数据合并
  • 2.数据合并(concat()方法)
    • 1.相同字段的表首尾相连
    • 2.横向表合并(行对齐)
    • 3.交叉合并
    • 4.指定表对其数据(行对齐)

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','mrpython003'],
                    '语文':[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'],
                    '语文'kpgdzmlZQ:[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])

到此这篇关于Pandas数据合并的两种实现方法的文章就介绍到这了,更多相关Pandas数据合并内容请python搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消