大家好,我是小寒 原文链接 今天给大家带来一篇 「如何在 pandas 上使用 apply 方法」,
大家好,我是小寒
今天给大家带来一篇 如何在 pandas 上使用 apply 方法,如果觉得不错,欢迎关注起来。
本文的内容主要如下:
- 在 Pandas Series 上使用 apply() 方法
- 在 Pandas Dataframe 上使用 apply() 方法
- 使用 apply() 方法的四个用例
apply() 方法主要用于数据清理,它专注于将方法应用于 pandas Series 中的每个元素以及 pandas DataFrame 的每一行/列。
在 Pandas Series 上使用 apply() 方法
Series 是一维数组,它具有名为索引的轴标签,并且还包含不同类型的数据,例如字符串、整数和其他 Python 对象。
让我们来创建一个 Series 对象,其中索引为行星,数据为对应行星的直径(以千米为单位)。
import pandas as pd
import numpy as np
planetinfo = pd.Series(data=[12750, 6800, 142800, 120660],
index=["Earth", "Mars", "Jupiter", "Saturn"])
planetinfo
输出为:
Earth 12750
Mars 6800
Jupiter 142800
Saturn 120660
dtype: int64
让我们看看如何使用 apply() 方法将每个行星的直径以千米为单位转换为英里(每千米等于0.6214英里)。
def km_to_miles(data):
return 0.6214 * data
print(planetinfo.apply(km_to_miles))
输出:
Earth 7922.850
Mars 4225.520
Jupiter 88735.920
Saturn 74978.124
dtype: float64
上面的代码返回了每个行星的直径英里的转换。
为此,我们首先定义了一个名为 km_to_miles() 的函数,然后我们将不带任何括号的函数传递给 apply() 方法。
apply() 方法然后获取 Series 中的每个数据点并对其应用 km_to_miles() 函数。
在 Pandas Dataframe 上使用 apply() 方法
首先我们先创建一个 Dataframe,以了解如何使用 apply() 方法在 Dataframe 中进行行和列的操作。
studentinfo=pd.DataFrame({'STUDENT_NAME':["MarkDavis","PriyaSingh","KimNaamjoon","TomKozoyed","TommyWalker"],
"ACADEMIC_STANDING":["Good","Warning","Probabtion","Suspension","Warning"],
"ATTENDANCE_PERCENTAGE":[0.8,0.75,0.25,0.12,0.30],
"MID_TERM_GRADE": ["A+","B-","D+","D-","F"]})
studentinfo
我们现在创建了一个名为 studentinfo 的数据框,并将通过探索 4 个不同的用例来学习如何使用 apply() 方法。
案例一、
作为数据清理检查的一部分,我们将检查 STUDENT_NAME 列中的所有值是否都只是字母。为此,我们将定义一个名为 datacheck() 的函数,该函数获取 STUDENT_NAME 列并使用 isalpha() 方法返回 True 或 False。
def datacheck(data):
if data.isalpha():
return True
else:
return False
现在我们将通过实现 apply() 方法对 studentinfo 数据框的 STUDENT_NAME 列应用 datacheck() 函数。
studentinfo["IS_ALPHABET"] = studentinfo["STUDENT_NAME"].apply(datacheck)
studentinfo
输出为:
我们可以看到 datacheck() 函数是如何应用于 STUDENT_NAME 列的每一行的,并且返回的结果存储在一个名为 IS_ALPHABET 的新列中。
案例二
我们对 ACADEMIC_STANDING 列进行处理,其中我们将类别 Good 标记为 ACADEMIC_STANDING_GOOD,其余类别标记为 ACADEMIC_STANDING_BAD。
为了实现这个用例,我们将定义一个名为 reduce_cardinality() 的函数,它获取列 ACADEMIC_STANDING。在函数内部,if 语句将用于比较检查,最后将 ACADEMIC_STANDING_GOOD 和 ACADEMIC_STANDING_BAD 返回到 ACADEMIC_STANDING 列中。
def reduce_cardinality(data):
if data != "Good":
return "ACADEMIC_STANDING_BAD"
else:
return "ACADEMIC_STANDING_GOOD"
现在我们将通过实现 apply() 方法在 studentinfo 数据框的 ACADEMIC_STANDING 列上应用 reduce_cardinality() 函数。
studentinfo["ACADEMIC_STANDING"]=studentinfo["ACADEMIC_STANDING"].apply(reduce_cardinality)
studentinfo
输出为:
我们可以看到如何在 ACADEMIC_STANDING 列的每一行上应用 reduce_cardinality() 函数,其中 ACADEMIC_STANDING 列中的原始值现在已修改为两个不同的类别,即 ACADEMIC_STANDING_BAD 和 ACADEMIC_STANDING_GOOD,从而减少了数据中类别数。
用例三
在这个用例中,我们将再次减少列 MID_TERM 的类别数,我们将以 A、B、C 开头的等级标记为 Corhigher,以 D、F、W 开头的等级标记为 Dorlower。
为了实现这个用例,我们将定义一个名为 reduce_cardinality_grade() 的函数。
def reduce_cardinality_grade(data):
if data.startswith('A'):
return "Corhigher"
elif data.startswith('B'):
return "Corhigher"
elif data.startswith('C'):
return "Corhigher"
else:
return "Dorlower"
现在我们将通过实现 apply() 方法在 studentinfo 数据框的 MID_TERM_GRADE 列上应用 reduce_cardinality_grade() 函数。
studentinfo["MID_TERM_GRADE"]=studentinfo["MID_TERM_GRADE"].apply(reduce_cardinality_grade)
studentinfo
我们可以看到如何在 MID_TERM_GRADE 列的每一行上应用 reduce_cardinality_grade() 函数,其中 MID_TERM_GRADE 列中的原始值现在已被修改为两个不同的类别,即 Corhigher 和 Dorlower,从而降低了基数。
用例四
我们将使用函数 check() 来创建一个名为 FINAL_GRADE_STATUS 的新列,其中 FINAL_GRADE_STATUS 中的值将根据以下两个条件确定:
- 如果学生的 ATTENDANCE_PERCENTAGE >= 0.6 并且 MID_TERM_GRADE 为 Corhigher,将被标记为 High_Chance_Of_Passing
- 如果学生的 ATTENDANCE_PERCENTAGE < 0.6 并且 MID_TERM_GRADE 为 Dorlower,将被标记为 Low_Chance_Of_Passing
def check(data):
if (data["ATTENDANCE_PERCENTAGE"] >= 0.6) and (data["MID_TERM_GRADE"] == "Corhigher"):
return "High_Chance_Of_Passing"
elif (data["ATTENDANCE_PERCENTAGE"] < 0.6) and (data["MID_TERM_GRADE"] == "Dorlower"):
return "Low_Chance_Of_Passing"
现在我们将通过实现 apply() 方法对 studentinfo 数据框的 ATTENDANCE_PERCENTAGE、MID_TERM_GRADE 列应用 check() 函数。axis=1 参数表示遍历数据框中的行。
studentinfo["FINAL_GRADE_STATUS"]=studentinfo[["ATTENDANCE_PERCENTAGE","MID_TERM_GRADE"]].apply(check,axis = 1)
studentinfo
我们可以看到 check() 函数如何应用于 MID_TERM_GRADE 和 ATTENDANCE_PERCENTAGE 列的每一行,从而返回一个名为 FINAL_GRADE_STATUS 的新列。
在本文中,我们通过探索不同的用例了解了如何使用 apply() 方法。apply() 方法使用户能够对 Series 或 Dataframe的每个值执行不同类型的数据操作。
最后
今天简单介绍了一下如何在 pandas 中使用 apply() 方法。