对于数据科学家来说,pandas 是一个必须知道的数据修改库。它对于使用 Python 处理数据的许多其他工作来说都是必不可少的。让我们带您快速了解 pandas 提供的所有强大工具!
Python 是当今使用最广泛的编程语言之一。处理数据的能力备受追捧,数据科学家、数据分析师和机器学习工程师等职位非常受欢迎。
数据科学家需要掌握很多技能。如果您是初学者或不确定从哪里开始,那么“ 数据科学 Python 入门” 课程就是您的理想选择。您可以快速掌握必要的技能,开始追逐梦想中的工作!或者,如果您已经了解 Python 并希望提高和巩固您的知识,您可以关注我们的 数据科学课程 .
在构建机器学习模型或以其他方式使用收集的数据之前,您需要进行一些初步探索和数据清理。由于表格数据是最常见的数据结构类型,因此使用 pandas 来完成这些任务非常有意义。
时间序列是另一种重要的结构类型,通过随着时间的推移重复记录对某些现象的观察而获得。这种类型的数据广泛用于金融和天气预报等领域。
要从时间序列数据中获取见解,了解如何正确地可视化它们非常重要。我们不会在这里介绍时间序列,但 这篇文章 可以帮助您开始可视化此类数据。
最广泛使用的 Pandas 操作
仅用一篇文章来全面介绍 Pandas 是一项艰巨的任务。相反,我们将介绍 Pandas 最常见的功能以及处理表格数据时面临的一些任务。
正如我所提到的,面对新的数据集时,首先要做的是 探索和清理 。清理工作包括消除数据中不需要的部分并处理缺失的数据条目。
对于本文中的所有示例,我们都使用学生数据集。让我们从探索开始 - 首先窥视数据集。
使用 Pandas 索引行
假设我们在一个名为“Report_Card.csv”的文件中拥有数据。我们可以使用以下代码片段读取数据,然后显示数据顶部或底部的几个条目。
import pandas as pd
Report_Card = pd.read_csv("Report_Card.csv")
Report_Card.head(3)
此代码段返回数据框顶部的前 3 个元素。使用
head()
或
tail()
查看大型数据集并规划我们的探索是一个好主意。后者,正如您可能已经猜到的那样,用于从数据框底部打印元素。
该代码片段的输出如下:
姓名 | 班级 | 演讲 | 年级 | 家庭作业 | |
---|---|---|---|---|---|
0 | 辛迪·拉尔斯 | 德 | 历史 | 96 | 3.0 |
1 | 西雅武 | 德 | 数学 | 72 | 2.0 |
2 | 比利·基 | A | 德语 | 89 | 1.0 |
请注意,我们有 0 和 1 等数字作为索引。如果我们已经知道需要哪些行,我们可以简单地使用
iloc
数据框的属性通过索引指定行。此属性允许我们通过整数位置访问一组行和列。换句话说,我们可以像处理 Python 中的其他任何内容一样处理索引。
假设我们想要属于 Siya Vu 的行。我们可以简单地使用:
Report_Card.iloc[1]
为了获得与相同的结果
head(3)
,我们可以使用基于范围的索引,如下所示:
iloc[0:3]
.
如果我们想要获取特定学生的具体信息,并且我们已经知道他们的索引号,我们可以
iloc
对列和行使用参数:
Report_Card.iloc[[7,4,12],0:3]
请记住,您可以使用索引数组或简单的范围。上面的代码片段返回第 7、4 和 12 个索引行以及 0 到 2 列(含)。如果我们省略上面的第二个参数
iloc
,它将返回所有列。
使用 Pandas 索引列
假设我们想查看学校的平均成绩,以便进行排名。我们可以
Grades
从数据框中提取列。使用
Report_Card["Grades"]
返回整个列。然后我们可以将函数
mean()
应用于该列并获取值
72.3789
.
如果我们是这所假想学校的校长,也许我们会比较各班的平均成绩,以找出可以改进的地方。为此,我们需要和
Grades
列
Class
;我们可以通过索引获取它们。要获取班级平均成绩,我们可以使用以下代码片段:
class_info = Report_Card[["Grades","Class"]]
class_info.groupby("Class").mean()
第一行代码为我们提供了一个只有两列的新数据框。需要指出的是,我们提供了一个列名列表作为参数,因为我们需要多个列名。在第二行中,我们使用
groupby()
以“
Class
”为参数的函数。这会将包含相同类值的所有行分组。然后,
mean()
对组使用该函数会得到下表:
班级 | 年级 |
---|---|
A | 70.06 |
乙 | 76.20 |
C | 71.70 |
德 | 73.13 |
看来最低平均成绩来自 A 班。我们现在可以进一步调查此事,以帮助困难的学生。
使用列索引获取所需部分的另一种用法是使用范围。以下是示例:
Report_Card.loc[:,'Name':'Lectures']
Report_Card.iloc[:,0:3]
两种情况下的冒号都代表“全部”。
您应该小心语法。使用 时
loc
,我们使用列名,并且范围的两端都包括在内。相反,使用 时
iloc
,我们使用数字索引,并且范围的右端不包括在内。
根据条件过滤行
让我们首先从 A 班中选择学生。可以这样做:
class_A = Report_Card.loc[(Report_Card["Class"] == "A")]
我们使用 loc 属性,它允许我们通过标签或布尔数组访问一组行和/或列。不过,这次我们使用后者并编写一个简单的条件语句。代码 (
Report_Card["Class"] == "A"
) 返回一个
p的对象as.Series
和
False
and
True
,该对象又用于索引我们的主要数据框。
现在我们有了 A 班的学生,我们需要一个计划来提高他们的表现。让我们仔细看看成绩低于平均水平的学生,比如说低于 15 分或更多。
我们可以使用
class_A
数据框,也可以组合两个条件并创建另一个数据框。为了便于说明,我们采用组合方法:
class_A_lower = Report_Card.loc[(Report_Card["Class"] == "A") & (Report_Card["Grades"] < 55)]
& 运算符在这里是“逻辑与”,这意味着我们想要班级为 A 且 成绩低于 55 的行。需要注意的是,我们使用 & 运算符的两个条件都应该放在括号中。否则,Python 会误解整个表达式,并引发错误。如果我们需要一个条件 或 另一个条件,我们使用 | 运算符,称为“逻辑或”。
现在我们可以集中精力帮助这些学生提高A班的平均成绩了。
创建新列并应用函数
做作业可能很无聊,但这是复习和巩固所学知识的好方法。让我们继续上一节,给 A 班学习困难的学生布置额外的作业。
让我们在
Grade_Report
数据框中添加一个新列,以指示学生必须完成多少额外的家庭作业。由于我们已经知道每个学生完成了多少原始作业,我们可以给那些在原始作业上懈怠的学生多加一点!
首先,我们定义一个非常简单的家庭作业函数。
def extra_hw(homework):
if homework >= 2:
return 2
elif homework == 0:
return 6
else:
return 4
如您所见,如果学生完成了两项或更多作业,我们只会给他们 2 项额外作业。未完成任何作业的学生将被处以 6 项额外作业,其他所有学生将获得 4 项额外作业。现在,我们将此函数应用于每一行并创建一个新列,说明每个学生需要完成多少新作业。
使用
class_A_lower
数据框,我们的数据更新如下:
class_A_lower["Extra"] =
class_A_lower.apply(lambda row: extra_hw(row["Homework"]),axis=1)
这行代码看起来有点吓人,但其实很简单。我们使用 pandas
apply()
并以
lambda
函数作为参数。该
lambda
函数
extra_hw()
上使用我们的函数
Homework
创建新的函数
Extra value
。附加参数
axis=1
意味着我们以逐行方式应用此 lambda 函数。该
apply()
函数是一种非常有效的修改数据框行的方法;它的表现远胜于对整个集合进行迭代。
让我们再看一个例子。学校根据学生姓名和电子邮件提供商为每个学生分配一个电子邮件地址。我们可以使用已有的数据框通过合并两个现有列来创建这个额外的列。以下代码片段实现了这一目标:
Report_Card["Email"] = (Report_Card["Name"].str.lower()).str.replace(" ", ".") + "@" + Report_Card["Domain"].str.lower()
当将字符串函数应用于对象时
pandas.Series
,我们首先需要使用
str
来访问其字符串值。这
name.middle.last_class@school.edu
将为每个学生创建一个具有“”结构的列。如果我们遇到只有学生电子邮件地址的情况,我们可以通过拆分电子邮件列轻松地将它们恢复为两个原始列,如下所示:
Report_Card[["Name2","Class2"]] = Report_Card["Email"].str.split("@", n=1, expand=True)
(Report_Card["Name2"].str.replace("."," ")).str.capitalize()
现在您已经了解了熊猫的基础知识!
恭喜!您已经迈出了掌握 Python 中 pandas 模块的第一步。我们还可以看看更多令人印象深刻的功能,但这会使这篇文章太长了!大多数更高级的 pandas 功能都建立在我们在玩具示例中讨论的内容之上,并且不会使用太多不同于这些基本功能的想法。
既然您已经学会了如何使用 p和as 清理和分析数据,那么下一步就是学习如何展示您的发现。由于您经常向没有编程背景的人展示您的发现,因此需要一种更直观的方法。如果您想要提高可视化技能,那么我们的文章
Matplotlib
正是您所需要的。
第一部分
and
第二部分
足以让您领先一步,从而创建令人惊叹的图表和视觉效果。
提高技能的另一个步骤是学习如何处理不同类型的数据。最重要的数据类型之一是变
datetime
日期和时间对象
的文章快速掌握必要的技能
.
发表评论 取消回复