自己准备数据集,举例实验merge方法进行两个数据集的合并操作,分别举例介绍inner、outer、left、right合并数据集的差异,同时将按照四种方法合并的数据以电子表格形式保存到当前目录下,文件名称用inner、outer、left、right为名称
时间: 2024-01-14 07:02:28 浏览: 65
data-merge:对大量数据进行合并处理,优化性能
好的,我可以为你解答这个问题。为了能够进行数据集合并操作,我们需要先准备两个数据集。这里我随机生成了两个数据集,分别是“学生信息表”和“成绩表”,它们的字段和内容如下:
学生信息表:
| 学号 | 姓名 | 年龄 | 性别 | 籍贯 |
| ---- | ---- | ---- | ---- | ---- |
| 001 | 张三 | 18 | 男 | 河北 |
| 002 | 李四 | 19 | 女 | 湖南 |
| 003 | 王五 | 20 | 男 | 山东 |
| 004 | 赵六 | 21 | 男 | 河南 |
成绩表:
| 学号 | 语文成绩 | 数学成绩 | 英语成绩 |
| ---- | -------- | -------- | -------- |
| 001 | 80 | 90 | 85 |
| 002 | 85 | 88 | 90 |
| 003 | 90 | 92 | 95 |
| 005 | 70 | 75 | 80 |
在 Python 中,我们可以使用 pandas 库来进行数据集合并操作。下面是四种不同的合并方法及其差异:
1. Inner 合并
Inner 合并是指只保留两个数据集中都存在的行。对于上面的例子,进行 Inner 合并的结果如下:
```python
import pandas as pd
# 读取学生信息表和成绩表
df1 = pd.read_csv('students.csv')
df2 = pd.read_csv('scores.csv')
# Inner 合并
df_inner = pd.merge(df1, df2, on='学号', how='inner')
print(df_inner)
```
输出结果:
| 学号 | 姓名 | 年龄 | 性别 | 籍贯 | 语文成绩 | 数学成绩 | 英语成绩 |
| ---- | ---- | ---- | ---- | ---- | -------- | -------- | -------- |
| 001 | 张三 | 18 | 男 | 河北 | 80 | 90 | 85 |
| 002 | 李四 | 19 | 女 | 湖南 | 85 | 88 | 90 |
| 003 | 王五 | 20 | 男 | 山东 | 90 | 92 | 95 |
可以看到,只有学号为 001、002、003 的学生信息和成绩被保留了下来,学号为 004 和 005 的学生信息和成绩被舍弃了。
2. Outer 合并
Outer 合并是指保留两个数据集中所有的行,如果某个数据集中的某一行在另一个数据集中不存在,则用 NaN 填充。对于上面的例子,进行 Outer 合并的结果如下:
```python
import pandas as pd
# 读取学生信息表和成绩表
df1 = pd.read_csv('students.csv')
df2 = pd.read_csv('scores.csv')
# Outer 合并
df_outer = pd.merge(df1, df2, on='学号', how='outer')
print(df_outer)
```
输出结果:
| 学号 | 姓名 | 年龄 | 性别 | 籍贯 | 语文成绩 | 数学成绩 | 英语成绩 |
| ---- | ---- | ---- | ---- | ---- | -------- | -------- | -------- |
| 001 | 张三 | 18 | 男 | 河北 | 80 | 90 | 85 |
| 002 | 李四 | 19 | 女 | 湖南 | 85 | 88 | 90 |
| 003 | 王五 | 20 | 男 | 山东 | 90 | 92 | 95 |
| 004 | 赵六 | 21 | 男 | 河南 | NaN | NaN | NaN |
| 005 | NaN | NaN | NaN | NaN | 70 | 75 | 80 |
可以看到,学号为 001、002、003 的学生信息和成绩被保留了下来,学号为 004 的学生信息被保留了下来,但是成绩表中不存在学号为 004 的学生成绩,所以用 NaN 填充。学号为 005 的学生成绩被保留了下来,但是学生信息表中不存在学号为 005 的学生信息,所以用 NaN 填充。
3. Left 合并
Left 合并是指以左边的数据集为主,保留左边数据集中所有行,如果右边的数据集中对应的行不存在,则用 NaN 填充。对于上面的例子,进行 Left 合并的结果如下:
```python
import pandas as pd
# 读取学生信息表和成绩表
df1 = pd.read_csv('students.csv')
df2 = pd.read_csv('scores.csv')
# Left 合并
df_left = pd.merge(df1, df2, on='学号', how='left')
print(df_left)
```
输出结果:
| 学号 | 姓名 | 年龄 | 性别 | 籍贯 | 语文成绩 | 数学成绩 | 英语成绩 |
| ---- | ---- | ---- | ---- | ---- | -------- | -------- | -------- |
| 001 | 张三 | 18 | 男 | 河北 | 80 | 90 | 85 |
| 002 | 李四 | 19 | 女 | 湖南 | 85 | 88 | 90 |
| 003 | 王五 | 20 | 男 | 山东 | 90 | 92 | 95 |
| 004 | 赵六 | 21 | 男 | 河南 | NaN | NaN | NaN |
可以看到,学号为 001、002、003、004 的学生信息被保留了下来,因为成绩表中不存在学号为 004 的学生成绩,所以用 NaN 填充。
4. Right 合并
Right 合并是指以右边的数据集为主,保留右边数据集中所有行,如果左边的数据集中对应的行不存在,则用 NaN 填充。对于上面的例子,进行 Right 合并的结果如下:
```python
import pandas as pd
# 读取学生信息表和成绩表
df1 = pd.read_csv('students.csv')
df2 = pd.read_csv('scores.csv')
# Right 合并
df_right = pd.merge(df1, df2, on='学号', how='right')
print(df_right)
```
输出结果:
| 学号 | 姓名 | 年龄 | 性别 | 籍贯 | 语文成绩 | 数学成绩 | 英语成绩 |
| ---- | ---- | ---- | ---- | ---- | -------- | -------- | -------- |
| 001 | 张三 | 18 | 男 | 河北 | 80 | 90 | 85 |
| 002 | 李四 | 19 | 女 | 湖南 | 85 | 88 | 90 |
| 003 | 王五 | 20 | 男 | 山东 | 90 | 92 | 95 |
| 005 | NaN | NaN | NaN | NaN | 70 | 75 | 80 |
可以看到,学号为 001、002、003、005 的学生成绩被保留了下来,因为学生信息表中不存在学号为 005 的学生信息,所以用 NaN 填充。
阅读全文