pandas常用操作复习-02-表格连接

目录

任务概述

实验环境

  因为我们的数据很小,所以对电脑没有过多的要求。不过因为是讲解python的库的使用,我们建立在已经对python的操作已经有了一定的基础之上。由于我的电脑过于卡顿,因此我是在google colab上进行的操作。因此推荐大家使用anaconda安装python及管理相关环境。推荐使用jupyter notebook来进行相关的操作的实验。jupyter notebook的代码编写和google colab的相关操作很相似。

  这里需要注意:读取和保存文件两个部分,路径应当自作修改!

前情概要

我们已经得到了以下五个数据:

  • 数据1: 学生花名册
  • 数据2: 班级1文化课成绩
  • 数据3: 班级1素质课成绩
  • 数据4: 班级3文化课成绩
  • 数据5: 班级3素质课成绩

  文化课和素质课分开的。因为农村一般不上素质课,所以素质课最后的分数都是统一随便打的 。当然我们的何老师现在还不知道。他一般喜欢把数据全部处理好以后再做统计分析。

工作细析

  何老师现在的工作是:分别将两个班的文化课和素质课合并在一起,这样就可以得到两个班所有的成绩在一起的表class_1_all和class_3_all。然后将两个表格连接起来,再结合花名册,将每个学生在哪个班级也添加进去。

目标样式

  最后的结果应当如下所示:
表格显示不全,底部有拖动处,请左右滑动进行查看

学号 姓名 语文 数学 英语 音乐 美术 体育 班级
A01 饶秀颖 35 45 55 95 95 95 1班
A02 于俊远 38 53 46 97 98 95 1班
A03 王五 54 46 38 97 99 97 1班
A08 冉颇 34 54 60 96 98 99 3班
A09 夫余岚裳 43 57 67 98 95 94 3班
A10 薛菁 55 60 65 96 93 96 3班

实际操作

1.导入模块

倘若没有相关的模块,请搜索安装一下两个库:pandas;pathlib
其中pandas是我们的主角,pathlib是操作文件的路径的库

import pandas as pd
# 查看pandas的版本,虽然在这里我们对版本没有具体的要求,但还是建议使用更新版的pandas,这样我们的操作能更方便。有时会遇到版本不同无法顺利处理数据的情况。
# pd.__version__
import pathlib

2.选择文件夹所在路径

# 指定五个数据所在的文件夹路径
# 这里因为我使用的是google colab,所以路径设置有些不同
# 常规的笔记本路径可以如下设置:
# path_root = r"D:\JupyterNotebook"
# 其中r表示绝对路径
path_root = "/content/drive/MyDrive/Notebooks_data/pandas_series"
path_root

out

/content/drive/MyDrive/Notebooks_data/pandas_series

3.获得每一个文件的单独路径-pathlib.Path().iterdir()

# 利用pathlib.Path可以获得这个文件夹下所有的文件的路径,但是需要使用.iterdir()显示
# 随后再使用list将之转换成列表,这样就方便指定文件
path_list = list(pathlib.Path(path_root).iterdir())
path_list

out

[PosixPath('/content/drive/MyDrive/Notebooks_data/pandas_series/03_1班素质课成绩.xlsx'),
 PosixPath('/content/drive/MyDrive/Notebooks_data/pandas_series/04_3班成绩_文化课成绩.xlsx'),
 PosixPath('/content/drive/MyDrive/Notebooks_data/pandas_series/02_1班成绩_文化课成绩.xlsx'),
 PosixPath('/content/drive/MyDrive/Notebooks_data/pandas_series/01_学生花名册.xlsx'),
 PosixPath('/content/drive/MyDrive/Notebooks_data/pandas_series/05_3班素质课成绩.xlsx')]

观察发现,pathlib.Path虽然可以一次性将所有的文件的路径得到,但是顺序并不是很顺畅

4.关键词连接表格-pd.merge()

4.1.班级1的数据连接

# 利用.read_excel读取数据
# 利用.merge智能的将两个表格连接起来
class_1_score1 = pd.read_excel(path_list[2])
class_1_score2 = pd.read_excel(path_list[0])
class_1_all = pd.merge(class_1_score1, class_1_score2)
class_1_all

out

学号 姓名 语文 数学 英语 音乐 美术 体育
0 A01 饶秀颖 35 45 55 95 95 95
1 A02 于俊远 38 53 46 97 98 95
2 A03 王五 54 46 38 97 99 97

4.2.班级3的数据连接

class_3_score1 = pd.read_excel(path_list[1])
class_3_score2 = pd.read_excel(path_list[4])
class_3_all = pd.merge(class_3_score1, class_3_score2)
class_3_all

out

学号 姓名 语文 数学 英语 音乐 美术 体育
0 A08 冉颇 34 54 60 96 98 99
1 A09 夫余岚裳 43 57 67 98 95 94
2 A10 薛菁 55 60 65 96 93 96

5.按轴向连接表格-.append()

# 两个dataframe上下拼接相连,在pandas中采用.append()方法
# 注意需要添加参数ignore_index=True,不然得到的dataframe会有重叠的索引不便于后续操作
score = class_1_all.append(class_3_all, ignore_index=True)
score

out

学号 姓名 语文 数学 英语 音乐 美术 体育
0 A01 饶秀颖 35 45 55 95 95 95
1 A02 于俊远 38 53 46 97 98 95
2 A03 王五 54 46 38 97 99 97
3 A08 冉颇 34 54 60 96 98 99
4 A09 夫余岚裳 43 57 67 98 95 94
5 A10 薛菁 55 60 65 96 93 96

倘若没有添加参数ignore_index=True,就会得到第一列重复的索引index:

学号 姓名 语文 数学 英语 音乐 美术 体育
0 A01 饶秀颖 35 45 55 95 95 95
1 A02 于俊远 38 53 46 97 98 95
2 A03 王五 54 46 38 97 99 97
0 A08 冉颇 34 54 60 96 98 99
1 A09 夫余岚裳 43 57 67 98 95 94
2 A10 薛菁 55 60 65 96 93 96

6.想所得到的表格添加其在哪一个班级

# 这一步也是使用merge()
# 我们先获得学生在哪个班级的那张表格数据
stu_names = pd.read_excel(path_list[3])
stu_names

out

班级 学号 姓名
0 1班 A01 饶秀颖
1 1班 A02 于俊远
2 1班 A03 王五
3 2班 A04 菱晗晗
4 2班 A05 耿龙
5 2班 A06 宫俊达
6 2班 A07 公金超
7 3班 A08 冉颇
8 3班 A09 夫余岚裳
9 3班 A10 薛菁
# 之所以这里添加他们在哪一个班级,是因为后面需要根据他们的成绩进行排名
# 排名之后需要知道这些学生在哪个班级,这样也方便比较两个班级的整体水平
score = score.merge(stu_names)
score

out

学号 姓名 语文 数学 英语 音乐 美术 体育 班级
0 A01 饶秀颖 35 45 55 95 95 95 1班
1 A02 于俊远 38 53 46 97 98 95 1班
2 A03 王五 54 46 38 97 99 97 1班
3 A08 冉颇 34 54 60 96 98 99 3班
4 A09 夫余岚裳 43 57 67 98 95 94 3班
5 A10 薛菁 55 60 65 96 93 96 3班

7.保存.to_excel(,index=False)

# pandas中的数据保存到一个Excel表格中可以自行搜索
# 这里添加参数index=False,是为了不保存额外的index数据
score.to_excel("/content/drive/MyDrive/Notebooks_data/score.xlsx", index=False)
上一篇:02月03日总结


下一篇:Ubu18开机自启动-Systemd