📅  最后修改于: 2023-12-03 14:57:58.050000             🧑  作者: Mango
Pandas 是 Python 中一个非常强大的数据处理库,它的一个重要功能就是表连接。表连接可以让我们将多个表按照某些列进行连接,从而方便地进行数据分析和处理。本文将通过示例代码来介绍 Pandas 中的几种常见的表连接方法。
首先,我们需要导入 Pandas 库和一些数据。我们将使用两个数据表:students.csv
和 scores.csv
。这两个表分别保存了学生信息和成绩信息。它们的格式如下:
students.csv
:
| id | name | gender | age | |----|--------|--------|-----| | 1 | Alice | Female | 20 | | 2 | Bob | Male | 21 | | 3 | Charlie| Male | 22 |
scores.csv
:
| student_id | course | score | |------------|--------|-------| | 1 | Math | 90 | | 1 | English| 85 | | 2 | Math | 92 | | 2 | English| 88 | | 3 | Math | 85 | | 3 | English| 80 |
我们可以使用 Pandas 的 read_csv
方法来读取这两个表:
import pandas as pd
students = pd.read_csv('students.csv')
scores = pd.read_csv('scores.csv')
内连接,也叫等值连接,是最常见的一种连接方式。它将两个表按照指定的列进行匹配,只保留匹配成功的行。在 Pandas 中,我们可以使用 merge
方法来进行内连接。
result = pd.merge(students, scores, left_on='id', right_on='student_id')
以上代码中,我们指定了 left_on
参数为 id
,表示在 students
表中按照 id
列进行匹配;right_on
参数为 student_id
,表示在 scores
表中按照 student_id
列进行匹配。最后的结果保存在 result
变量中。
左连接,也叫左外连接,是连接操作中的一种。它会保留左边表(即调用 merge
方法的那个表)中所有的行,与右边表按照指定列匹配的行也会被保留。如果右边表中不存在对应的行,则使用 NaN
补齐。在 Pandas 中,我们可以通过指定 how='left'
参数来实现左连接。
result = pd.merge(students, scores, how='left', left_on='id', right_on='student_id')
以上代码中,我们指定了 how
参数为 'left'
,表示进行左连接。其他参数的含义同内连接。
右连接,也叫右外连接,与左连接类似,只不过它会保留右边表中所有的行。在 Pandas 中,我们可以通过指定 how='right'
参数来实现右连接。
result = pd.merge(students, scores, how='right', left_on='id', right_on='student_id')
以上代码中,我们指定了 how
参数为 'right'
,表示进行右连接。其他参数的含义同内连接和左连接。
外连接,也叫全外连接,是内连接、左连接和右连接的综合。它会保留左右两个表中所有的行,并在匹配不成功的行处使用 NaN
填充。在 Pandas 中,我们可以通过指定 how='outer'
参数来实现外连接。
result = pd.merge(students, scores, how='outer', left_on='id', right_on='student_id')
以上代码中,我们指定了 how
参数为 'outer'
,表示进行外连接。其他参数的含义同内连接、左连接和右连接。
本文介绍了 Pandas 中的几种常见的表连接方法:内连接、左连接、右连接和外连接。通过这些操作,我们可以方便地将多个表进行关联分析。
完整代码如下:
import pandas as pd
students = pd.read_csv('students.csv')
scores = pd.read_csv('scores.csv')
# 内连接
result = pd.merge(students, scores, left_on='id', right_on='student_id')
# 左连接
result = pd.merge(students, scores, how='left', left_on='id', right_on='student_id')
# 右连接
result = pd.merge(students, scores, how='right', left_on='id', right_on='student_id')
# 外连接
result = pd.merge(students, scores, how='outer', left_on='id', right_on='student_id')