📜  连接表 pandas - Python (1)

📅  最后修改于: 2023-12-03 14:57:58.050000             🧑  作者: Mango

连接表 pandas - Python

Pandas 是 Python 中一个非常强大的数据处理库,它的一个重要功能就是表连接。表连接可以让我们将多个表按照某些列进行连接,从而方便地进行数据分析和处理。本文将通过示例代码来介绍 Pandas 中的几种常见的表连接方法。

准备工作

首先,我们需要导入 Pandas 库和一些数据。我们将使用两个数据表:students.csvscores.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')
Inner Join

内连接,也叫等值连接,是最常见的一种连接方式。它将两个表按照指定的列进行匹配,只保留匹配成功的行。在 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 变量中。

Left Join

左连接,也叫左外连接,是连接操作中的一种。它会保留左边表(即调用 merge 方法的那个表)中所有的行,与右边表按照指定列匹配的行也会被保留。如果右边表中不存在对应的行,则使用 NaN 补齐。在 Pandas 中,我们可以通过指定 how='left' 参数来实现左连接。

result = pd.merge(students, scores, how='left', left_on='id', right_on='student_id')

以上代码中,我们指定了 how 参数为 'left',表示进行左连接。其他参数的含义同内连接。

Right Join

右连接,也叫右外连接,与左连接类似,只不过它会保留右边表中所有的行。在 Pandas 中,我们可以通过指定 how='right' 参数来实现右连接。

result = pd.merge(students, scores, how='right', left_on='id', right_on='student_id')

以上代码中,我们指定了 how 参数为 'right',表示进行右连接。其他参数的含义同内连接和左连接。

Outer Join

外连接,也叫全外连接,是内连接、左连接和右连接的综合。它会保留左右两个表中所有的行,并在匹配不成功的行处使用 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')