下面给您详细讲解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_on
和right_on
两个参数,它们分别指定左侧数据框架和右侧数据框架进行合并的字段。
步骤二:删除多余列,并修改列名
由于我们使用了left_on
和right_on
参数进行合并,因此合并后会有两个相同的列出现,即student_id
和id
。为了保留合并后重叠的信息,我们需要修改列名并删除其中一个。
df = df.drop('id',axis=1)
df = df.rename(columns={'student_id':'id'})
先使用drop()
函数删除id
列,随后使用rename()
函数重命名student_id
为id
。
步骤三:调整列顺序
最后,我们还可以使用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进行合并两个具有不同列的数据框架的完整攻略,希望对您有所帮助。