DataFrame的apply()、applymap()、map()方法[通俗易懂]

DataFrame的apply()、applymap()、map()方法[通俗易懂]对DataFrame对象中的某些行或列,或者对DataFrame对象中的所有元素进行某种运算或操作,我们无需利用低效笨拙的循环,DataFrame给我们分别提供了相应的直接而简单的方法,apply()和applymap()。其中apply()方法是针对某些行或列进行操作的,而applymap()方法则是针对所有元素进行操作的。1map()方法Themapmethod…

大家好,又见面了,我是你们的朋友全栈君。

       对DataFrame对象中的某些行或列,或者对DataFrame对象中的所有元素进行某种运算或操作,我们无需利用低效笨拙的循环,DataFrame给我们分别提供了相应的直接而简单的方法,apply()和applymap()。其中apply()方法是针对某些行或列进行操作的,而applymap()方法则是针对所有元素进行操作的。

 1 map()方法

The map method works on series, so in our case, we will use it to transform a column of our DataFrame, which remember is just a pandas Series. Suppose that we decide that the class names are a bit long for our taste and we would like to code them using our special threeletter coding system. We’ll use the map method with a Python dictionary as the argument toaccomplish this. We’ll pass in a replacement for each of the unique iris types:

df[‘class’] = df[‘class’].map({‘Iris-setosa’: ‘SET’, ‘Iris-virginica’:’VIR’, ‘Iris-versicolor’: ‘VER’})
df

DataFrame的apply()、applymap()、map()方法[通俗易懂]

2 Apply()方法

The apply method allows us to work with both DataFrames and Series. We’ll start with an example that would work equally well with map, then we’ll move on to examples that would work only with apply.

Using the iris DataFrame, let’s make a new column based on the petal width. We previously saw that the mean for the petal width was 1.3. Let’s now create a new column in our DataFrame, wide petal, that contains binary values based on the value in the petal width column. If the petal width is equal to or wider than the median, we will code it with a 1, and if it is less than the median, we will code it 0. We’ll do this using the apply method on the petal width column:

df[‘wide petal’] = df[‘petal width’].apply(lambda v: 1 if v >= 1.3 else 0)
df

DataFrame的apply()、applymap()、map()方法[通俗易懂]

df[‘petal area’] = df.apply(lambda r: r[‘petal length’] * r[‘petal width’],axis=1)
df

DataFrame的apply()、applymap()、map()方法[通俗易懂]

3 Applymap()方法

We’ve looked at manipulating columns and explained how to work with rows, but suppose that you’d like to perform a function across all data cells in your DataFrame; this is where applymap is the right tool. Let’s take a look at an example:

df.applymap(lambda v: np.log(v) if isinstance(v, float) else v)

DataFrame的apply()、applymap()、map()方法[通俗易懂]

4 Groupby方法

df.groupby(‘class’).mean()

df.groupby(‘petalwidth’)[‘class’].unique().to_frame()

df.groupby(‘petalwidth’)[‘class’].unique().to_frame()

DataFrame的apply()、applymap()、map()方法[通俗易懂]

df.groupby(‘petal width’)[‘class’].unique().to_frame()

df.groupby(‘class’).describe()

df.groupby(‘class’)[‘petal width’].agg({‘delta’: lambda x: x.max() – x.min(), ‘max’: np.max, ‘min’: np.min})

   

简单来说,apply()方法 可以作用于DataFrame 还有Series, 作用于一行或者一列时,我们不妨可以采用,因为可以通过设置axis=0/1 来把握,demo如下:

DataFrame的apply()、applymap()、map()方法[通俗易懂]

applymap() 作用于每一个元素

DataFrame的apply()、applymap()、map()方法[通俗易懂]

map可以作用于Series每一个元素的

DataFrame的apply()、applymap()、map()方法[通俗易懂]

总的来说,map()、aply()、applymap()方法是一种对series、dataframe极其方便的应用与映射函数。

最后,非常重要的一点,这些映射函数,里面都是可以放入自定义函数的。

tips.head()

Out[34]:

total_bill tip smoker day time size tip_pct
0 16.99 1.01 No Sun Dinner 2 0.059447
1 10.34 1.66 No Sun Dinner 3 0.160542
2 21.01 3.50 No Sun Dinner 3 0.166587
3 23.68 3.31 No Sun Dinner 2 0.139780
4 24.59 3.61 No Sun Dinner 4 0.146808

def top(df,n=5,column=’tip_pct’):
    return df.sort_values(by=column)[-n:]

tips.groupby(‘smoker’).apply(top)

Out[38]:

total_bill tip smoker day time size tip_pct
smoker
No 88 24.71 5.85 No Thur Lunch 2 0.236746
185 20.69 5.00 No Sun Dinner 5 0.241663
51 10.29 2.60 No Sun Dinner 2 0.252672
149 7.51 2.00 No Thur Lunch 2 0.266312
232 11.61 3.39 No Sat Dinner 2 0.291990
Yes 109 14.31 4.00 Yes Sat Dinner 2 0.279525
183 23.17 6.50 Yes Sun Dinner 4 0.280535
67 3.07 1.00 Yes Sat Dinner 1 0.325733
178 9.60 4.00 Yes Sun Dinner 2 0.416667
172 7.25 5.15 Yes Sun Dinner 2 0.710345
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145590.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SAGA GIS_GOSAT卫星数据下载

    SAGA GIS_GOSAT卫星数据下载官网:SAGA-SystemforAutomatedGeoscientificAnalyseshttps://saga-gis.sourceforge.io/en/index.html点击下载按钮点击后等几秒即可下载下载时间过长

  • navicat for mysql 15 激活码【2021.8最新】

    (navicat for mysql 15 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsa…

  • python之pandas简单介绍及使用(一)「建议收藏」

    python之pandas简单介绍及使用(一)「建议收藏」一、  Pandas简介1、PythonDataAnalysisLibrary或pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一…

  • mysql mariadb 安装_mysql兼mariadb安装过程详解

    mysql mariadb 安装_mysql兼mariadb安装过程详解mysql兼mariadb下载自己找自己对应的版本:https://dev.mysql.com/downloads/mysql/因为5.5以后都用cmake编译了,所以系统里没有的话,就下个源码的装一下,怎么测试系统里有没有装了,在命令行中输入#cma在按Tab看有没有cmake有的话系统就装过了,就不用在装了。没有话就去下个吧,下载地址:https://cmake.org/downloa…

  • 小程序 table_小程序下滑样式

    小程序 table_小程序下滑样式先看效果图wxml<viewclass=”mdui-m-t-2mudi-f-s-24″>1.养老保险</view><viewclass=”mdui-m-t-1mudi-indentmudi-f-s-20″>养老保险,全称社会基本养老保险,是国家和社会根据一定的法律和法规,为解决劳动者在达到国家规定的解除劳动义务的劳动…

  • 如何快速搭建图片服务器[通俗易懂]

    前言最近学习一个分布式集群的项目,正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。代码参考:https://github.com/zyjcxc/taotao.git比如:解决办法:linux做磁盘的映射,说能解决,但服务器多了也不好弄,所以可以再搭建一个图片服务器图片服务器两个服务:http:可以使用nginx…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号