파이썬数据可视化入门2 - 处理Pandas

힘센캥거루
2023년 11월 10일(수정됨)
8
15

在本文中,我们将讨论用于数据处理的工具Pandas

如果尚未配置数据可视化的环境,请参考以下文章

1. 什么是Pandas?

Pandas是用于数据操作和分析的库。

可以将列表或字典转换为表格形式进行处理

파이썬数据可视化入门2 - 处理Pandas-1

例如,假设有一个包含3个列表的列表,如下所示。

lstInLst = [[1,2,3],[4,5,6],[7,8,9]]

如果仅更改此资料的表示方法,就会得到如下形式。乍一看有点像表格

lstInLst = [[1,2,3],
    [4,5,6],
    [7,8,9]]

现在将这些数据转换为Pandas...

import pandas as pd
df = pd.DataFrame(lstInLst)
print(df)

如下所示成为表的形式。

这种Pandas数据类型称为数据框

파이썬数据可视化入门2 - 处理Pandas-2

现在可以根据行或列进行处理

如果难以理解,可以认为它类似于Excel

现在让我们看看一些大致的功能。

2. 基本的pandas用法

如上所述,Pandas类似于Excel

因此,使用Pandas时需要学习的功能与使用Excel时学习的功能相同

通常,在使用Excel时,最重要的功能是查看数据、排序、复制所需的单元格等。

让我们以这些内容为中心来体验一下Pandas

파이썬数据可视化入门2 - 处理Pandas-3

数据已附加在下面。大约有11行和5列的数据。你可以使用它,也可以自己创建使用。

1) 导入模块和加载文件(read_excel)

首先将数据和Jupyter Notebook文件放在一起

파이썬数据可视化入门2 - 处理Pandas-4

然后输入如下代码。代码的解释已在注释中添加。

# 将pandas导入为pd
import pandas as pd

# 导入同一文件夹中的名为workout的Excel,并存入名为df的变量
df = pd.read_excel("./workout.xlsx")

# 调用df变量以确认内容
df

通过确认df可以看到已加载的数据

通常需要使用print(df),但在Jupyter Notebook中,仅输入变量名也能直接查看值。

现在我们来处理这些数据。

파이썬数据可视化入门2 - 处理Pandas-5

2) 查看(head, tail, index, columns)

由于数据量很小,可以显示全部内容,但如果数据量大,就难以一次查看。

在这种情况下,可以通过head、tail函数和index大致查看值。

(1) head

head显示顶部的数据

点击顶部的[+ 代码]将添加一个输入窗口。

파이썬数据可视化入门2 - 处理Pandas-6

在此窗口中输入下方代码。

# 显示数据的顶部数据(默认5行)
# df为包含数据框的变量(对象)。
df.head()

# 在括号中输入要查看的行数。
df.head(3)

如果显示如下输出,则成功。

这样可以查看部分数据。

파이썬数据可视化入门2 - 处理Pandas-7

(2) tail

tail用于查看最后的数据

默认显示5个值,但在括号中输入数值即可输出指定数量的值。

与head相同。

# 显示最下方的数据
df.tail()

# 在括号中输入所需的行数。
df.tail(3)

为了初学者的说明,括号中输入的值称为参数

파이썬数据可视化入门2 - 处理Pandas-8

(3) index

index用于简单地显示数据的数量和形态。

在想要确认数据的大致数量时很有用。

df.index
파이썬数据可视化入门2 - 处理Pandas-9

3) 排序(sort_values, sort_index, reset_index)

(1) sort_values

sort_values可以按值的升序或降序排序。

可以在存有对象的变量后输入以下形式来轻松排序。

# 变量名.sort_values("列名")
df.sort_values("名称")
파이썬数据可视化入门2 - 处理Pandas-10

如果希望在两个以上列中排序,可以在括号中以列表形式输入列名

# 如果输入的列表是["数学", "名称"],
# 则先按名称排序,再按数学分数排序。
# 列表中越靠前,排序优先级越高。
df.sort_values(["数学","名称"])
파이썬数据可视化入门2 - 处理Pandas-11

默认情况下,排序为升序。

如果希望按降序排序,则需额外输入一个参数

# 如果将ascending设为False,则按降序排序。
# 在前面用by=[]明确表示参数的作用。
df.sort_values(["数学","名称"], ascending=False)
df.sort_values(by=["数学","名称"], ascending=False)
파이썬数据可视化入门2 - 处理Pandas-12

顺便一说,排序后,查看原始数据会发现与开始时相同

这是由于未将排序后的数据重新分配给df所导致的问题。

有两种解决方法。

  • 分配给新变量

  • 添加参数inplace = True

如果添加一个新变量,则如下所示。

파이썬数据可视化入门2 - 处理Pandas-13

如果添加参数inplace=True,则会覆盖原有的变量

파이썬数据可视化入门2 - 处理Pandas-14

(2) sort_index

sort_index顾名思义是根据索引排序。输入代码如下。

# 如果分配给新变量
df3 = df.sort_index()
df3

# 如果使用inplace参数
df.sort_index(inplace=True)
df

查看输出时,可以看到索引按初始顺序排序。

파이썬数据可视化入门2 - 处理Pandas-15

(3) reset_index

reset_index是重新指定索引。

对数据进行排序后要重新指定索引时,输入的代码如下。

# 根据地球科学分数升序排序,并存入原变量
df.sort_values("地球科学", inplace=True)

# 重新指定索引,丢弃原索引,并存入原变量
df.reset_index(drop=True, inplace=True)

# 查看输出
df

可以看到数据根据地球科学分数升序排列后重新指定了索引

如果希望保留原索引,则删除drop参数即可。

파이썬数据可视化入门2 - 处理Pandas-16

4) 删除(drop, dropna)

(1) drop

此函数用于删除指定的行或列

接受index 和 columns为参数

虽然可以使用axis等多种方法删除,但使用简单且舒适的就好

#drop接受各种参数,但用index和columns最方便。
# 删除第2行
df.drop(index=1, inplace=True)
df

# 删除数学、英语列
df.drop(columns=["数学","英语"], inplace=True)
df

首先,删除索引为1的行,可以看到输出结果。

파이썬数据可视化入门2 - 处理Pandas-17

接下来,删除数学和英语列,需要将参数设置为columns,并以列表形式输入值

파이썬数据可视化入门2 - 处理Pandas-18

(2) dropna

dropna用于删除缺少值的行

通常称为删除缺失值

我用numpy创建了一个临时的任意缺失值。

以下代码可以一知半解

大致来说就是将第4行、第3列的值更改为缺失值的代码

파이썬数据可视化入门2 - 处理Pandas-19

数据中出现NaN表示该值缺失。NaN是Not a Number的缩写

现在,删除没有值的行。

df.dropna(inplace=True)
df
파이썬数据可视化入门2 - 处理Pandas-20

可以看到没有地球科学成绩的“이서”被删除了。

或者,也可以将NaN值替换为0或其他数字。

在此不涉及该水平。

5) 提取行列(loc, iloc, 简单方法)

使用数据时,可以仅使用指定的行或列

在这种情况下,使用loc和iloc

(1) loc

loc是location的缩写

在loc后输入行和列的范围,如同输入字典的键值

# df.loc[行索引范围, 列索引范围]
df.loc[0:3,"名称":"国语"]
df

需要输入索引和列的真实名称

当前行的索引是数字,列的索引是中文,输入后可以显示指定范围内的数据。

파이썬数据可视化入门2 - 处理Pandas-21

如果想要显示索引为3的行开始的名称和地球科学列,可以按如下方式输入。

df.loc[3:,["名称","地球科学"]]
df

连续的数据使用冒号(:)不连贯的数据使用列表形式

파이썬数据可视化入门2 - 处理Pandas-22

(2) iloc

iloc是integer location的缩写

loc与loc功能相同,但行和列的位置用数字表示。

例如,如上所述,如果想要输出索引为3行的姓名和地球科学,则可以按如下方式输入。

df.iloc[2:,[0,2]]
df
파이썬数据可视化入门2 - 处理Pandas-23

注意在loc中行参数为3,而在iloc中行参数为2

파이썬数据可视化入门2 - 处理Pandas-24

loc则是从索引为3的行开始输出,iloc是跳过第0行、第1行,从第2行开始输出

(3) 简单方法

变量后面可简单地使用字典形式的方括号[]来查看数据

如果你想查看0~3行、名称和地球科学列,可以按如下方式输入。

# 在变量后简单地用[]查看数据。
df[0:4][["名称","地球科学"]]
df
파이썬数据可视化入门2 - 处理Pandas-25

现在让我们查看一下名称。

名称所在列的索引为“名称”,可以简单地输入如下内容。

df["名称"]
파이썬数据可视化入门2 - 处理Pandas-26

在使用过程中会发现该方法在尝试修改数据时可能引发错误

因此,如果想要更改值,建议使用loc或iloc。

6) 条件语句

(1) 单一条件语句

条件语句用于查找符合条件的数据。

认为它与Excel的过滤功能相同即可。

例如,若要查找地球科学成绩超过90分的学生,可以如下输入。

df["地球科学"] > 90

这样输入时,会遍历表中的所有单元格并返回条件的True或False值

파이썬数据可视化入门2 - 处理Pandas-27

将其放入数据框中,Pandas会输出True的行。

# 使用loc条件语句(推荐)
df.loc[df["地球科学"]>90]

# 使用更简单的方法
df[df["地球科学"]>90]

无论哪种方式,输出结果都没有太大区别,选择你喜欢的方式即可。

因为我们目标不是Pandas,首先尝试一下发生错误时再换方法也不迟。

파이썬数据可视化入门2 - 处理Pandas-28파이썬数据可视化入门2 - 处理Pandas-29

(2) 多重条件语句

可以给出多个条件。

df.loc[(df["地球科学"]>90) & (df["英语"]>90)]

要找到同时满足两个条件的值将两个条件括在一起并在中间插入&符号

插入and会产生错误。

파이썬数据可视化入门2 - 处理Pandas-30

若要找到满足任意一个条件的值输入 | 即可。

同样插入or会产生错误。

df.loc[(df["地球科学"]>90) | (df["英语"]>90)]
파이썬数据可视化入门2 - 处理Pandas-31

可以在条件符合的值中仅查看所需的列

df.loc[(df["地球科学"]>90) | (df["英语"]>90), ["名称","英语" "地球科学"]]
파이썬数据可视化入门2 - 处理Pandas-32

7) 其他有用功能(columns, unique)

在进行数据可视化时,有时需要将数据的性质作为图例表示

在这种情况下,可用columns查看列的索引,或使用unique函数返回唯一值。

(1) columns

用于查看数据的列的索引。

df.columns

重新调用数据后,再次查看索引时,可以看到如下输出。

파이썬数据可视化入门2 - 处理Pandas-33

如果要绘制国文、数学、英语、地球科学的成绩图,无需手动输入图例,可以很方便地指定

파이썬数据可视化入门2 - 处理Pandas-34

(2) unique

该函数去除数据的重复值并返回唯一值

先查看地球科学的成绩

파이썬数据可视化入门2 - 处理Pandas-35

输出地球科学成绩的唯一值。

df["地球科学"].unique()

查看代码输出结果,可以看到相同99分的学生实际上有两个,但显示中只有一个

파이썬数据可视化入门2 - 处理Pandas-36

以数组形式返回,可以逐一拿出来查看值。

파이썬数据可视化入门2 - 处理Pandas-37

3. 结束语

在本文中,我们了解了使用Pandas处理数据的方法

只涉及基础内容,可能感觉难度较低。

我们第一个目标不是数据预处理,而是可视化结构化数据

接下来的文章将尝试解决一些简单的Pandas练习题

관련 글

学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
如果要在学校工作里选出一项最无意义、最辛苦、最无聊的,我会选生记簿检查。在初中,学生综合素质评价(生活记录簿)并不那么重要,但在高中它与升学直接相关,因此极其重要。问题在于,这样的生记簿检查最终找的无非就是简单的错别字、禁止填写用语、拼写等。这篇文章就是从这样的疑问开始的。现在这种简单检查,是不是已...
从零构建中学习 LLM 第7章读书心得与挑战回顾
从零构建中学习 LLM 第7章读书心得与挑战回顾
第7章的内容是让模型遵循指令进行微调的过程。也就是让它针对某个问题给出我们期望的回答。果然,最需要的还是数据。1. 指令微调步骤这里的核心是准备好问答数据集,用作输入-输出对来进行训练。这就叫做提示(prompt)风格。其他部分就像之前的流程一样,对内容进行分词(tokenize)、训练和评估,过程...
从零开始构建中学习 LLM 第 6 章读后感
从零开始构建中学习 LLM 第 6 章读后感
第 6 章是为分类进行微调。作为例子给出的任务是构建垃圾邮件分类器。垃圾邮件分类器需要判断一封邮件是不是垃圾邮件,因此输出结果要是类似 0、1 这样的值。1. 微调的顺序微调的过程和训练模型的过程很相似。准备数据集,加载权重值,然后进行训练和评估。稍微不同的一点是,会有一个把输出层映射到 0(非垃圾...
从零开始构建中学习 LLM 第5章读书后记
从零开始构建中学习 LLM 第5章读书后记
今天是12月14日。其实挑战期已经过去整整两周了,但也不能因此就放弃写后记。像这样留下的 TIL(Today I Learned),以后都会变成自己的血和肉。这次打算比起代码本身,更专注在“意义”上来写一写。1. 模型的损失计算这一部分讲的是,在构建好 GPT 模型之后,用什么方式来计算损失。GPT...
从零开始动手实现 LLM 第4章读书心得
从零开始动手实现 LLM 第4章读书心得
今天是11月26日,如果每天读一章并看完的话,这次挑战就算成功。在老大和老二的各种干扰下,不知道能不能做到。1. Dummy Transformer在实现 GPT 模型的过程中,看到是从 PyTorch 里拿来一个 Transformer 的 dummy 模块用的。一查才发现,在 PyTorch 的...
通过从头构建学习的LLM第3章读后感
通过从头构建学习的LLM第3章读后感
我在MacBook上泼了一大杯水后,崩溃了,浪费了大约3-4天。现在回想起来,反正MacBook已经坏了,应该想着送修,干点别的事情。无论如何,虽然有点晚了,但我觉得必须坚持到底,所以留下了第3章的读后感。1. 注意力机制第3章...

댓글을 불러오는 중...