如何在Pandas中从另一个DataFrame添加列?
在使用Pandas进行数据处理时,我们经常需要从一个DataFrame中提取或者处理数据,然后将处理后的数据添加到另一个DataFrame中。在这篇文章中,我们将讨论如何在Pandas中从另一个DataFrame中添加列。
Pandas简介
Pandas是一个开源的Python数据分析库,提供了快速、灵活、明确的数据结构,用于数据重组、聚合和清理等操作。它的数据分析功能主要包括数据清洗和整理、以及数据计算和统计等。Pandas的优势在于它非常适合对结构化数据进行处理,可方便的进行数据导入和导出、数据清理和预处理、数据分析和可视化等操作。
实例演练
我们先生成两个DataFrame,一个是学生信息表,另一个是学生成绩表。
import pandas as pd
# 学生信息表
info = pd.DataFrame({'name': ['张三', '李四', '王五', '赵六'],
'age': [18, 19, 20, 21],
'gender': ['男', '男', '女', '女']})
# 学生成绩表
score = pd.DataFrame({'name': ['张三', '李四', '王五', '赵六'],
'math': [90, 80, 85, 75],
'english': [85, 70, 90, 80]})
现在我们想要将学生成绩表中的 math
和 english
两列数据添加到学生信息表中,即将学生成绩表中的两列数据合并到学生信息表中去。
在Pandas中实现这一操作有两种方法,分别是使用 join()
方法和使用 merge()
方法。下面分别对这两种方法进行讲解。
方法一:使用join()方法
join()
方法用于按照指定的列名将两个DataFrame对象进行合并,类似于SQL中的JOIN操作。在默认情况下,join()
方法使用两个DataFrame中共有的列作为关联列,进行连接操作。
这里我们将学生成绩表中的 math
和 english
列使用 join()
方法添加到学生信息表中。
# 根据name列把两个表合并
result = info.join(score.set_index('name'), on='name')
print(result)
输出结果如下:
name age gender math english
0 张三 18 男 90 85
1 李四 19 男 80 70
2 王五 20 女 85 90
3 赵六 21 女 75 80
上面的代码中,我们使用 join()
方法根据学生成绩表中的 name
列和学生信息表中的 name
列进行连接,然后将学生成绩表中的 math
和 english
列添加到学生信息表中,最终得到了一张包含了学生信息和成绩信息的新表。
方法二:使用merge()方法
merge()
方法与 join()
方法类似,都是用于按照指定的列名将两个DataFrame对象进行合并。不同之处在于,merge()
方法可以支持更加复杂的连接操作,可以根据多个列进行关联,而且也支持指定连接方式(比如内连接、左连接、右连接、全连接等)。
这里我们将学生成绩表中的 math
和 english
列使用 merge()
方法添加到学生信息表中。
result = pd.merge(info, score, on='name')
print(result)
输出结果如下:
name age gender math english
0 张三 18 男 90 85
1 李四 19 男 80 70
2 王五 20 女 85 90
3 赵六 21 女 75 80
上面的代码中,我们使用 merge()
方法根据学生成绩表和学生信息表中的 name
列进行连接,然后将学生成绩表中的 math
和 english
列添加到学生信息表中,最终得到了一张包含了学生信息和成绩信息的新表。
注意点
在使用上述两种方法时,需要注意一些细节:
join()
方法默认情况下会使用两个DataFrame中共有的列作为关联列,进行连接操作。如果不想使用共有列作为关联列,可以使用lsuffix
和rsuffix
参数进行设置。例如,如果学生信息表和学生成绩表中都有一个id
列,而你想要使用id
列进行连接,可以使用以下代码:result = info.join(score.set_index('id'), on='id', lsuffix='_info', rsuffix='_score')
这里我们使用了
lsuffix
和rsuffix
参数来指定在合并过程中共有列的后缀名称。-
merge()
方法默认情况下是根据两个DataFrame中的共有列进行连接操作。如果想要根据多个列进行关联,可以使用on
参数指定关联的列名列表,例如:result = pd.merge(info, score, on=['name', 'age'])
这里我们使用了
on
参数来指定关联的列名列表,多个列名之间用逗号隔开。 -
如果两个DataFrame中的共有列名称不同,可以使用
left_on
和right_on
参数分别指定左右两个DataFrame中的列名。例如:info.rename(columns={'name': 'student_name'}, inplace=True) result = pd.merge(info, score, left_on='student_name', right_on='name')
这里我们使用了
left_on
和right_on
参数来指定左右两个DataFrame中的列名。
结论
在Pandas中从另一个DataFrame添加列,可以使用 join()
方法或者 merge()
方法实现。join()
方法适用于两个DataFrame有共同列名的情况,而 merge()
方法适用于多个列名的合并。在使用这两种方法时,需要注意参数设置和列名重复的问题。