Pandas函数应用

不管是为Pandas对象应用自定义函数,还是应用第三方函数,都离不开以下几种方法。用哪种方法取决于操作的对象是DataFrame,还是Series;是行、列,还是元素。

1.表现级函数应用:pipe()

2.行列级函数应用:apply()

3.聚合API:agg()与transform()

4.元素级函数应用:applymap()

表现级函数应用

虽然可以把DataFrame与Series传递给函数,不过链式调用函数时,最好使用pipe()方法。对比以下两种方式:


下列代码与上述代码是等效的:


Pandas建议使用第二种方式,即链式方法。在链式方法中调用自定义函数或第三方支持库函数时,用pipe更容易,与用Pandas自身方法一样。

上述示例中,f、g与h这几个函数都把DataFrame当作首位参数。要是想把数据作为第二个参数,我们可以怎么做呢?本例中,pipe为元组(callable,data_keyword)形式。.pipe把DataFrame作为元组里指定的参数。

下面示例用statmodels拟合回归,该API先接收一个公示,DataFrame是第二个参数,data。要传递函数,则要用pipe接收关键词对(sm.ols,’data’)。


unix的pipe与后来出现的dplyr及magrittr带动了pipe方法,在此,引入了R语言里用于读取pipe的操作符(%>%)。pipe的实现思路非常清晰,仿佛跟Python源生的一样。

行列级函数应用

apply()方法沿着DataFrame的轴应用函数,比如,描述性统计方法,该方法支持axis参数。


apply()方法还支持通过函数名字符串调用函数。


默认情况下,apply()调用的函数返回的类型会影响DataFrame输出结构的类型。

函数返回的是Series时,最终输出结果是DataFrame。输出的列与函数返回的Series索引相匹配。

函数返回其它任意类型时,输出结果是Series。

result_type会覆盖默认行为,该参数有三个选项:reduce、broadcast、expand。

这些选项决定了列表型返回值是否扩展为DataFrame。

我们用好了apply()的话,可以了解数据集的很多信息。比如可以提取每列的最大值对应的日期:


还可以向apply()方法传递额外的参数与关键字参数。比如下面示例中要应用的这个函数:


可以用以下方式应用该函数:


为每行或每例执行Series方法的功能也非常的实用:


apply()有一个参数raw,默认值为False,再应用函数前,使用该参数可以将每行或列转换为Series。该参数为True时,传递的函数接收ndarray对象,若不需要索引功能,这样操作能够显著的提高性能。

聚合API

聚合API可以快速、简洁地执行多个聚合操作。Pandas对象支持多个类似地API,如groupby

API、window functions API、resample

API。聚合函数为DataFrame.aggregate(),也可以叫做Dataframe.agg()。

在这里我们用与上例类似的DataFrame:


应用单个函数时,该操作与apply()等效,这里也可以用字符串表示聚合函数名。下面的聚合函数输出的结果为Series:


Series单个聚合操作返回标量值:


多聚合函数

还可以用列表形式传递多个聚合函数。每个函数在输出结果DataFrame里以行的形式显示,行名是每个聚合函数的函数名。


多个函数输出多行:


Series聚合多函数返回结果还是Series,索引为函数名:


传递lambda函数时,输出名为<lambda>的行:


应用自定义函数时,该函数名为输出结果的行名:


用字典实现聚合

指定为哪些列应用哪些聚合函数时,需要把包含列名与标量(或标量列表)的字典传递给DataFrame.agg。

但我们要注意,这里输出结果的顺序不是固定的,要想让输出顺序与输入顺序一致,我们可以使用OrderedDict。


输出的参数是列表时,输出的结果为DataFrame,并以矩阵形式显示所有聚合函数的计算结果,且输出结果有所有唯一函数组成。未执行聚合操作的列输出结果为NaN值:


多种数据类型(Dtype)

与groupby的.agg操作类似,DataFrame含不能执行聚合的数据类型时,.agg只计算可聚合的列:



自定义Describe

.agg()可以创建类似于内置describe函数的自定义describe函数。


Transfrom API

transform方法的返回结果与原始数据的索引相同,大小相同。与.agg API类似,该API支持同时处理多种操作,不用一个一个操作。

首先,创建一个DataFrame:


这里转换的是整个DataFrame。.transform()支持NumPy函数、字符串函数及自定义函数。


这里的transform()接收单个函数;与ufunc等效。


.transform向Series传递单个函数时,返回的结果也是单个Series。


多函数Transfrom

transform()调用多个函数时,生成多层索引DataFrame。第一层是原始数据集的列名;第二层是transform()调用的函数名。


为Series应用多个函数时,输出结果是DataFrame,列名是transform()调用的函数名。


用字典执行transfrom操作

函数字典可以为每列执行指定transform()操作。


transform()的参数是列表字典时,生成的是以transform()调用的函数名为多层索引的DataFrame。


元素级函数应用

并非所有函数都能矢量化,即接受NumPy数组,返回另一个数组或值,DataFrame的applymap()及Series的map(),支持任何接收单个值并返回单个值的Python函数。


Series.map()还有个功能,可以“连接”或“映射”第二个Series定义的值。这与merging/joining功能联系非常紧密:


以上就是Pandas函数应用的所有知识了,希望对你有所帮助。

如果你想学习Python,但是找不到学习路径和资源,欢迎来指尖编程

高效在线交互式学Python,更快更好!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容