如何在Pandas中从另一个DataFrame添加列?

如何在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]})

现在我们想要将学生成绩表中的 mathenglish 两列数据添加到学生信息表中,即将学生成绩表中的两列数据合并到学生信息表中去。

在Pandas中实现这一操作有两种方法,分别是使用 join() 方法和使用 merge() 方法。下面分别对这两种方法进行讲解。

方法一:使用join()方法

join() 方法用于按照指定的列名将两个DataFrame对象进行合并,类似于SQL中的JOIN操作。在默认情况下,join() 方法使用两个DataFrame中共有的列作为关联列,进行连接操作。

这里我们将学生成绩表中的 mathenglish 列使用 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 列进行连接,然后将学生成绩表中的 mathenglish 列添加到学生信息表中,最终得到了一张包含了学生信息和成绩信息的新表。

方法二:使用merge()方法

merge() 方法与 join() 方法类似,都是用于按照指定的列名将两个DataFrame对象进行合并。不同之处在于,merge() 方法可以支持更加复杂的连接操作,可以根据多个列进行关联,而且也支持指定连接方式(比如内连接、左连接、右连接、全连接等)。

这里我们将学生成绩表中的 mathenglish 列使用 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 列进行连接,然后将学生成绩表中的 mathenglish 列添加到学生信息表中,最终得到了一张包含了学生信息和成绩信息的新表。

注意点

在使用上述两种方法时,需要注意一些细节:

  1. join() 方法默认情况下会使用两个DataFrame中共有的列作为关联列,进行连接操作。如果不想使用共有列作为关联列,可以使用 lsuffixrsuffix 参数进行设置。例如,如果学生信息表和学生成绩表中都有一个 id 列,而你想要使用 id 列进行连接,可以使用以下代码:
    result = info.join(score.set_index('id'), on='id', lsuffix='_info', rsuffix='_score')
    

    这里我们使用了 lsuffixrsuffix 参数来指定在合并过程中共有列的后缀名称。

  2. merge() 方法默认情况下是根据两个DataFrame中的共有列进行连接操作。如果想要根据多个列进行关联,可以使用 on 参数指定关联的列名列表,例如:

    result = pd.merge(info, score, on=['name', 'age'])
    

    这里我们使用了 on 参数来指定关联的列名列表,多个列名之间用逗号隔开。

  3. 如果两个DataFrame中的共有列名称不同,可以使用 left_onright_on 参数分别指定左右两个DataFrame中的列名。例如:

    info.rename(columns={'name': 'student_name'}, inplace=True)
    result = pd.merge(info, score, left_on='student_name', right_on='name')
    

    这里我们使用了 left_onright_on 参数来指定左右两个DataFrame中的列名。

结论

在Pandas中从另一个DataFrame添加列,可以使用 join() 方法或者 merge() 方法实现。join() 方法适用于两个DataFrame有共同列名的情况,而 merge() 方法适用于多个列名的合并。在使用这两种方法时,需要注意参数设置和列名重复的问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程