您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:解析pandas apply() 函数用法(推荐)

51自学网 2022-02-21 10:50:08
  python
这篇教程解析pandas apply() 函数用法(推荐)写得很实用,希望能帮到您。

理解 pandas 的函数,要对函数式编程有一定的概念和理解。函数式编程,包括函数式编程思维,当然是一个很复杂的话题,但对今天介绍的 apply() 函数,只需要理解:函数作为一个对象,能作为参数传递给其它函数,也能作为函数的返回值。

函数作为对象能带来代码风格的巨大改变。举一个例子,有一个类型为 list 的变量,包含 从 1 到 10 的数据,需要从其中找出能被 3 整除的所有数字。用传统的方法:

def can_divide_by_three(number):    if number % 3 == 0:        return True    else:        return Falseselected_numbers = []for number in range(1, 11):    if can_divide_by_three(number):        selected_numbers.append(number)

循环是不可少的,因为 can_divide_by_three() 函数只用一次,考虑用 lambda 表达式简化:

divide_by_three = lambda x : True if x % 3 == 0 else Falseselected_numbers = []for number in range(1, 11):    if divide_by_three(item):        selected_numbers.append(item)

以上是传统编程思维方式,而函数式编程思维则完全不同。我们可以这样想:从 list 中取出特定规则的数字,能不能只关注和设置规则,循环这种事情交给编程语言去处理呢?当然可以。当编程人员只关心规则(规则可能是一个条件,或者由某一个 function 来定义),代码将大大简化,可读性也更强。

Python 语言提供 filter() 函数,语法如下:

filter(function, sequence)

filter() 函数的功能:对 sequence 中的 item 依次执行 function(item),将结果为 True 的 item 组成一个 List/String/Tuple(取决于 sequence 的类型)并返回。有了这个函数,上面的代码可以简化为:

divide_by_three = lambda x : True if x % 3 == 0 else Falseselected_numbers = filter(divide_by_three, range(1, 11))

将 lambda 表达式放在语句中,代码简化到只需要一句话就够了:

selected_numbers = filter(lambda x: x % 3 == 0, range(1, 11))

Series.apply()

回到主题, pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。

举一个例子,现在有这样一组数据,学生的考试成绩:

  Name Nationality  Score   张           汉    400   李           回    450   王           汉    460

如果民族不是汉族,则总分在考试分数上再加 5 分,现在需要用 pandas 来做这种计算,我们在 Dataframe 中增加一列。当然如果只是为了得到结果, numpy.where() 函数更简单,这里主要为了演示 Series.apply() 函数的用法。

import pandas as pddf = pd.read_csv("studuent-score.csv")df['ExtraScore'] = df['Nationality'].apply(lambda x : 5 if x != '汉' else 0)df['TotalScore'] = df['Score'] + df['ExtraScore']

对于 Nationality 这一列, pandas 遍历每一个值,并且对这个值执行 lambda 匿名函数,将计算结果存储在一个新的 Series 中返回。上面代码在 jupyter notebook 中显示的结果如下:

  Name Nationality  Score  ExtraScore  TotalScore
0    张           汉    400           0         400
1    李           回    450           5         455
2    王           汉    460           0         460

apply() 函数当然也可执行 python 内置的函数,比如我们想得到 Name 这一列字符的个数,如果用 apply() 的话:

df['NameLength'] = df['Name'].apply(len)

apply 函数接收带有参数的函数

根据 pandas 帮助文档 pandas.Series.apply
pandas 读取excel文件的操作代码
Python条件语句与循环语句

万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。