首页 > 编程语言 >你不得不知的python apply()

你不得不知的python apply()

时间:2022-09-23 14:48:40浏览次数:73  
标签:STANDING python ACADEMIC 不得 GRADE studentinfo apply data

大家好,我是小寒

原文链接

今天给大家带来一篇 如何在 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() 方法。

本文由mdnice多平台发布

标签:STANDING,python,ACADEMIC,不得,GRADE,studentinfo,apply,data
From: https://www.cnblogs.com/cxyxz/p/16722638.html

相关文章

  • python的wheel
    一、windows安装python包,遇见的问题1、python3以后的版本,安装python包,可以直接使用pip安装,但是安装时偶尔报错2、安装python源码包,如何确定自己该安装哪个版本,......
  • bash中调用python、expect
    !usr/bin/bash指定解释器指定bash解释器(.sh)#!/usr/bin/bashping-c1www.qfedu.com&&echo"www.qfedu.comisup"||echo"www.qfedu.comisdown"指定py......
  • python-模块-模块导入之__name__
    1模块__name__每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想......
  • python之操作数据库删除创建
    importMySQLdb#创建一个数据库连接对象conn=MySQLdb.connect(host='localhost',port=3306,user='root',password='123456')#获取连接的游标......
  • python数据透视表
    #%%importpandasaspdimportnumpyasnp#%%df=pd.read_csv('标普500财务数据项目.csv',sep=',')#%%df#%%atq=df.iloc[:,[0,1,2,4]]niq=df.iloc......
  • Python基础
    目录实用方案多个MD文档的合并参考参考:python.org编译器参考参考:PyCharm日志2022年09月23日12:52:54初始版本实用方案多个MD文档的合并#使用说明:#1.......
  • 我做过的Python30道练习题
    练习题1成绩等级要求输出成绩等级A、B、C、D、E,其中90-100分为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求:-用If语句实现;-输入百分制成绩后要判断该成绩......
  • 前 30 个 Python 面试问题和实践答案
    前30个Python面试问题和实践答案[](https://click.linksynergy.com/deeplink?id=CuIbQrBnhiw&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2F100-days-of......
  • linux python连接oracle数据库
    最近公司要求在linux下对Mysql,Oracle进行增加用户,用户改密等操作。Mysql数据库实现起来比较简单,这个Oracle让我头疼了一阵。于是从网上查阅资料,经自己的测试以后终于成功,现......
  • Python离线安装第三方包
    Python离线安装第三方包1.通过pip下载安装包,然后在其他机器上安装python-mpipdownloadtest==1.3.5//安装的库名为test,版本为1.3.5python-mpipinstall--no......