iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用pandas apply()函数
  • 556
分享到

怎么使用pandas apply()函数

2023-06-25 12:06:29 556人浏览 泡泡鱼
摘要

这篇文章主要讲解了“怎么使用pandas apply()函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用pandas apply()函数”吧!理解 pandas 的函数,要对函数式

这篇文章主要讲解了“怎么使用pandas apply()函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用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 1.3.1 documentation,该函数可以接收位置参数或者关键字参数,语法如下:

Series.apply(func, convert_dtype=True, args=(), **kwargs)

对于 func 参数来说,该函数定义中的第一个参数是必须的,所以 funct() 除第一个参数之外的其它参数则被视为额外的参数,作为参数来传递。我们仍以刚才的示例进行说明,假设除汉族外,其他少数名族有加分,我们把加分放在函数的参数中,先定义一个 add_extra() 函数:

def add_extra(nationality, extra):    if nationality != "汉":        return extra    else:        return 0

对 df 新增一列:

df['ExtraScore'] = df.Nationality.apply(add_extra, args=(5,))

位置参数通过 args = () 来传递参数,类型为 tuple。也可用下面的方法调用:

df['ExtraScore'] = df.Nationality.apply(add_extra, extra=5)

运行后结果为:

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

将 add_extra 作为 lambda 函数:

df['Extra'] = df.Nationality.apply(lambda n, extra : extra if n == '汉' else 0, args=(5,))

下面继续讲解关键字参数。假设我们对不同的民族可以给不同的加分,定义 add_extra2() 函数:

def add_extra2(nationaltiy, **kwargs):    return kwargs[nationaltiy]       df['Extra'] = df.Nationality.apply(add_extra2, 汉=0, 回=10, 藏=5)

运行结果为:

  Name Nationality  Score  Extra
0    张           汉    400      0
1    李           回    450     10
2    王           汉    460      0

对照 apply 函数的语法,不难理解。

DataFrame.apply()

DataFrame.apply() 函数则会遍历每一个元素,对元素运行指定的 function。比如下面的示例:

import pandas as pdimport numpy as npmatrix = [    [1,2,3],    [4,5,6],    [7,8,9]]df = pd.DataFrame(matrix, columns=list('xyz'), index=list('abc'))df.apply(np.square)

对 df 执行 square() 函数后,所有的元素都执行平方运算:

x   y   za   1   4   9b  16  25  36c  49  64  81

如果只想 apply() 作用于指定的行和列,可以用行或者列的 name 属性进行限定。比如下面的示例将 x 列进行平方运算:

df.apply(lambda x : np.square(x) if x.name=='x' else x)
x  y  za   1  2  3b  16  5  6c  49  8  9

下面的示例对 x 和 y 列进行平方运算:

df.apply(lambda x : np.square(x) if x.name in ['x', 'y'] else x)
x   y  za   1   4  3b  16  25  6c  49  64  9

下面的示例对第一行 (a 标签所在行)进行平方运算:

df.apply(lambda x : np.square(x) if x.name == 'a' else x, axis=1)

默认情况下 axis=0 表示按列,axis=1 表示按行。

apply() 计算日期相减示例

平时我们会经常用到日期的计算,比如要计算两个日期的间隔,比如下面的一组关于 wbs 起止日期的数据:

wbs   date_from     date_to  job1  2019-04-01  2019-05-01  job2  2019-04-07  2019-05-17  job3  2019-05-16  2019-05-31  job4  2019-05-20  2019-06-11

假定要计算起止日期间隔的天数。比较简单的方法就是两列相减(datetime 类型):

import pandas as pdimport datetime as dtwbs = {    "wbs": ["job1", "job2", "job3", "job4"],    "date_from": ["2019-04-01", "2019-04-07", "2019-05-16","2019-05-20"],    "date_to": ["2019-05-01", "2019-05-17", "2019-05-31", "2019-06-11"]}df = pd.DataFrame(wbs)df['elpased'] = df['date_to'].apply(pd.to_datetime) -                  df['date_from'].apply(pd.to_datetime)

apply() 函数将 date_fromdate_to 两列转换成 datetime 类型。我们 print 一下 df:

wbs   date_from     date_to elapsed0  job1  2019-04-01  2019-05-01 30 days1  job2  2019-04-07  2019-05-17 40 days2  job3  2019-05-16  2019-05-31 15 days3  job4  2019-05-20  2019-06-11 22 days

日期间隔已经计算出来,但后面带有一个单位 days,这是因为两个 datetime 类型相减,得到的数据类型是 timedelta64,如果只要数字,还需要使用 timedeltadays 属性转换一下。

elapsed= df['date_to'].apply(pd.to_datetime) -    df['date_from'].apply(pd.to_datetime)df['elapsed'] = elapsed.apply(lambda x : x.days)

使用 DataFrame.apply() 函数也能达到同样的效果,我们需要先定义一个函数 get_interval_days() 函数的第一列是一个 Series 类型的变量,执行的时候,依次接收 DataFrame 的每一行。

import pandas as pdimport datetime as dtdef get_interval_days(arrLike, start, end):       start_date = dt.datetime.strptime(arrLike[start], '%Y-%m-%d')    end_date = dt.datetime.strptime(arrLike[end], '%Y-%m-%d')     return (end_date - start_date).dayswbs = {    "wbs": ["job1", "job2", "job3", "job4"],    "date_from": ["2019-04-01", "2019-04-07", "2019-05-16","2019-05-20"],    "date_to": ["2019-05-01", "2019-05-17", "2019-05-31", "2019-06-11"]}df = pd.DataFrame(wbs)df['elapsed'] = df.apply(    get_interval_days, axis=1, args=('date_from', 'date_to'))

感谢各位的阅读,以上就是“怎么使用pandas apply()函数”的内容了,经过本文的学习后,相信大家对怎么使用pandas apply()函数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么使用pandas apply()函数

本文链接: https://www.lsjlt.com/news/304458.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用pandas apply()函数
    这篇文章主要讲解了“怎么使用pandas apply()函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用pandas apply()函数”吧!理解 pandas 的函数,要对函数式...
    99+
    2023-06-25
  • Pandas中apply函数怎么用
    这篇文章主要介绍Pandas中apply函数怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用apply拆分文本Pandas 中 apply 函数,应用广泛,今天要跟大家分享一...
    99+
    2024-04-02
  • Pandas中map(),applymap(),apply()函数如何使用
    本文小编为大家详细介绍“Pandas中map(),applymap(),apply()函数如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pandas中map(),applymap(),apply()函数如何使用”文章能帮助大家解决...
    99+
    2023-07-05
  • Pandas Apply怎么用
    这篇文章将为大家详细讲解有关Pandas Apply怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Pandas ApplyApply是为Pandas Series而设计的。如果你不太熟悉Series...
    99+
    2023-06-27
  • pandas的apply函数用法详解
    目录1.基本信息2.语法结构3.使用案例3.1 DataFrame使用apply3.2 Series使用apply3.3 其他案例4.总结1.基本信息 Pandas 的 apply(...
    99+
    2023-01-11
    pandas apply用法 pandas apply
  • Pandas中map(),applymap(),apply()函数的使用方法
    目录指定pandas对象作为NumPy函数的参数元素的应用行/列的应用pandas.DataFrame,pandas.Series方法Pandas对象方法的函数应用适用于Series...
    99+
    2023-02-22
    Pandas map() applymap() apply()
  • Pandas的map,apply,applymap怎么使用
    这篇文章主要介绍了Pandas的map,apply,applymap怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pandas的map,apply,applymap怎么使用文章都会有所收获,下面我们一起...
    99+
    2023-06-29
  • 解析pandas apply() 函数用法(推荐)
    目录Series.apply()apply 函数接收带有参数的函数DataFrame.apply()apply() 计算日期相减示例参考理解 pandas 的函数,要对函数式编程有一...
    99+
    2024-04-02
  • pandas中如何使用apply函数来应用带两个参数的函数
    这篇文章给大家分享的是有关pandas中如何使用apply函数来应用带两个参数的函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。有两个参数的函数pandas 中的 apply ...
    99+
    2024-04-02
  • pandas函数isnull怎么使用
    今天小编给大家分享一下pandas函数isnull怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一.假设有数据集df...
    99+
    2023-07-02
  • python中apply函数怎么用
    本篇内容主要讲解“python中apply函数怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中apply函数怎么用”吧!函数原型:DataFrame.apply(func,&n...
    99+
    2023-06-26
  • JS中call()、apply()和bind()函数怎么使用
    今天小编给大家分享一下JS中call()、apply()和bind()函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-04
  • python Pandas绘图函数怎么使用
    这篇文章主要介绍了python Pandas绘图函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python Pandas绘图函数怎么使用文章都会有所收获,下面我们一起来看看吧。简介method绘图类...
    99+
    2023-07-04
  • Python pandas中apply函数简介以及用法详解
    目录1.基本信息2.语法结构3.使用案例3.1 DataFrame使用apply3.2 Series使用apply3.3 其他案例4.总结参考链接:1.基本信息 ​ Pandas 的...
    99+
    2024-04-02
  • Pandas库中iloc[ ]函数怎么使用
    本篇内容主要讲解“Pandas库中iloc[ ]函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas库中iloc[ ]函数怎么使用”吧!1 iloc[]函数...
    99+
    2023-07-06
  • Python 中如何使用apply函数
    这篇文章给大家介绍Python 中如何使用apply函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、介绍apply函数是pandas里面所有函数中自由度最高的函数。该函数如下:DataFrame.apply(fu...
    99+
    2023-06-04
  • pandas中怎么使用合并append函数
    小编给大家分享一下pandas中怎么使用合并append函数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下:1、append函数可以拼接一个或者多个,也可以追加serise到原来的dataframe里面。将其他...
    99+
    2023-06-14
  • pandas调用函数怎么用
    这篇“pandas调用函数怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pandas调用函数怎么用”文章吧。0. 数据...
    99+
    2023-06-30
  • Python Pandas中loc和iloc函数怎么使用
    今天小编给大家分享一下Python Pandas中loc和iloc函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-02
  • Pandas中Apply函数加速百倍的技巧分享
    目录前言实验对比01 Apply(Baseline)02 Swift加速03 向量化04 类别转化+向量化05 转化为values处理实验汇总前言 虽然目前dask,cudf等包的出...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作