Pandas – 合并两个具有不同列的数据框架

  • Post category:Python

下面给您详细讲解Pandas-合并两个具有不同列的数据框架的完整攻略。

背景

在数据处理中,很多情况下需要将两个数据框架合并起来,但是这两个数据框架的列名是不一样的,那么该如何处理呢?Pandas提供了丰富的数据合并函数,本攻略将重点介绍如何合并两个具有不同列的数据框架。

准备工作

首先,我们需要准备两个待合并的数据框架,以及确定它们的合并方式。模拟数据如下:

#导入模块
import pandas as pd

#数据框架1
df1 = pd.DataFrame({
        'student_id':['A001','A002','A003','A004'],
        'name':['Tom','Jerry','Henry','Alice'],
        'age':[18,17,19,20]
})

#数据框架2
df2 = pd.DataFrame({
        'id':['A001','A004','A002','A003'],
        'score':[90,72,88,92]
})

其中,数据框架1为学生基本信息,包括学生编号、姓名、年龄三个字段;数据框架2为学生成绩信息,包括学生编号、成绩两个字段。

合并操作

接下来,我们将按照以下步骤进行合并操作。

步骤一:将两个数据框架合并成一个

使用pandas.merge()函数合并两个数据框架,其中参数how指定合并方式,此处我们选择使用左外连接(left)方式合并数据,即保留左侧数据框架df1的所有信息,右侧未匹配到的数据用NaN填充。

df = pd.merge(df1,df2,left_on='student_id',right_on='id',how='left')

此处我们使用了left_onright_on两个参数,它们分别指定左侧数据框架和右侧数据框架进行合并的字段。

步骤二:删除多余列,并修改列名

由于我们使用了left_onright_on参数进行合并,因此合并后会有两个相同的列出现,即student_idid。为了保留合并后重叠的信息,我们需要修改列名并删除其中一个。

df = df.drop('id',axis=1)
df = df.rename(columns={'student_id':'id'})

先使用drop()函数删除id列,随后使用rename()函数重命名student_idid

步骤三:调整列顺序

最后,我们还可以使用reindex()函数调整列顺序,以使列排布更加整齐。

df = df.reindex(columns=['id','name','age','score'])

完整代码

下面是完整的合并操作代码:

#导入模块
import pandas as pd

#数据框架1
df1 = pd.DataFrame({
        'student_id':['A001','A002','A003','A004'],
        'name':['Tom','Jerry','Henry','Alice'],
        'age':[18,17,19,20]
})

#数据框架2
df2 = pd.DataFrame({
        'id':['A001','A004','A002','A003'],
        'score':[90,72,88,92]
})

#合并操作
df = pd.merge(df1,df2,left_on='student_id',right_on='id',how='left')
df = df.drop('id',axis=1)
df = df.rename(columns={'student_id':'id'})
df = df.reindex(columns=['id','name','age','score'])
print(df)

结果展示

运行上述代码,得到合并后数据框架的结果如下:

     id    name  age  score
0  A001     Tom   18   90.0
1  A002   Jerry   17   88.0
2  A003   Henry   19   92.0
3  A004   Alice   20   72.0 

其中,最后一列score为合并后新增的列。注意,由于我们采用的是左外连接方式合并数据,因此A004学生的分数由于未匹配到成绩信息,该单元格的值填充为NaN。

以上就是使用Pandas进行合并两个具有不同列的数据框架的完整攻略,希望对您有所帮助。