详解 Pandas 与 Lambda 结合进行高效数据分析
作者 | 俊欣
来源 | 关于数据分析与可视化
这篇文章小编来讲讲lambda
方法以及它在pandas
模块当中的运用,熟练掌握可以极大地提高数据分析与挖掘的效率
导入模块与读取数据
我们第一步需要导入模块以及数据集
import pandas as pddf = pd.read_csv("IMDB-Movie-Data.csv")
df.head()
创建新的列
一般我们是通过在现有两列的基础上进行一些简单的数学运算来创建新的一列,例如
df['AvgRating'] = (df['Rating'] + df['Metascore']/10)/2
但是如果要新创建的列是经过相当复杂的计算得来的,那么lambda
方法就很多必要被运用到了,我们先来定义一个函数方法
def custom_rating(genre,rating):if 'Thriller' in genre:return min(10,rating+1)elif 'Comedy' in genre:return max(0,rating-1)elif 'Drama' in genre:return max(5, rating-1)else:return rating
我们对于不同类别的电影采用了不同方式的评分方法,例如对于“惊悚片”,评分的方法则是在“原来的评分+1”和10分当中取一个最小的,而对于“喜剧”类别的电影,则是在0分和“原来的评分-1”当中取一个最大的,然后我们通过apply
方法和lambda
方法将这个自定义的函数应用在这个DataFrame
数据集当中
df["CustomRating"] = df.apply(lambda x: custom_rating(x['Genre'], x['Rating']), axis = 1)
我们这里需要说明一下axis
参数的作用,其中axis=1
代表跨列而axis=0
代表跨行,如下图所示
筛选数据
在pandas
当中筛选数据相对来说比较容易,可以用到& | ~
这些操作符,代码如下
# 单个条件,评分大于5分的
df_gt_5 = df[df['Rating']>5]# 多个条件: AND - 同时满足评分高于5分并且投票大于100000的
And_df = df[(df['Rating']>5) & (df['Votes']>100000)]# 多个条件: OR - 满足评分高于5分或者投票大于100000的
Or_df = df[(df['Rating']>5) | (df['Votes']>100000)]# 多个条件:NOT - 将满足评分高于5分或者投票大于100000的数据排除掉
Not_df = df[~((df['Rating']>5) | (df['Votes']>100000))]
这些都是非常简单并且是常见的例子,但是要是我们想要筛选出电影的影名长度大于5
的部分,要是也采用上面的方式就会报错
df[len(df['Title'].split(" "))>=5]
output
AttributeError: 'Series' object has no attribute 'split'
这里我们还是采用apply
和lambda
相结合,来实现上面的功能
#创建一个新的列来存储每一影片名的长度
df['num_words_title'] = df.apply(lambda x : len(x['Title'].split(" ")),axis=1)#筛选出影片名长度大于5的部分
new_df = df[df['num_words_title']>=5]
当然要是大家觉得上面的方法有点繁琐的话,也可以一步到位
new_df = df[df.apply(lambda x : len(x['Title'].split(" "))>=5,axis=1)]
例如我们想要筛选出那些影片的票房低于当年平均水平的数据,可以这么来做。
我们先要对每年票房的的平均值做一个归总,代码如下
year_revenue_dict = df.groupby(['Year']).agg({'Revenue(Millions)':np.mean}).to_dict()['Revenue(Millions)']
然后我们定义一个函数来判断是否存在该影片的票房低于当年平均水平的情况,返回的是布尔值
def bool_provider(revenue, year):return revenue<year_revenue_dict[year]
然后我们通过结合apply
方法和lambda
方法应用到数据集当中去
new_df = df[df.apply(lambda x : bool_provider(x['Revenue(Millions)'],x['Year']),axis=1)]
我们筛选数据的时候,主要是用.loc
方法,它同时也可以和lambda
方法联用,例如我们想要筛选出评分在5-8分之间的电影以及它们的票房,代码如下
df.loc[lambda x: (x["Rating"] > 5) & (x["Rating"] < 8)][["Title", "Revenue (Millions)"]]
转变指定列的数据类型
通常我们转变指定列的数据类型,都是调用astype
方法来实现的,例如我们将“Price”这一列的数据类型转变成整型的数据,代码如下
df['Price'].astype('int')
会出现如下所示的报错信息
ValueError: invalid literal for int() with base 10: '12,000'
因此当出现类似“12,000”的数据的时候,调用astype
方法实现数据类型转换就会报错,因此我们还需要将到apply
和lambda
结合进行数据的清洗,代码如下
df['Price'] = df.apply(lambda x: int(x['Price'].replace(',', '')),axis=1)
方法调用过程的可视化
有时候我们在处理数据集比较大的时候,调用函数方法需要比较长的时间,这个时候就需要有一个要是有一个进度条,时时刻刻向我们展示数据处理的进度,就会直观很多了。
这里用到的是tqdm
模块,我们将其导入进来
from tqdm import tqdm, tqdm_notebook
tqdm_notebook().pandas()
然后将apply
方法替换成progress_apply
即可,代码如下
df["CustomRating"] = df.progress_apply(lambda x: custom_rating(x['Genre'],x['Rating']),axis=1)
output
当lambda
方法遇到if-else
当然我们也可以将if-else
运用在lambda
自定义函数当中,代码如下
Bigger = lambda x, y : x if(x > y) else y
Bigger(2, 10)
output
10
当然很多时候我们可能有多组if-else
,这样写起来就有点麻烦了,代码如下
df['Rating'].apply(lambda x:"低分电影" if x < 3 else ("中等电影" if x>=3 and x < 5 else("高分电影" if x>=8 else "值得观看")))
看上去稍微有点凌乱了,这个时候,小编这里到还是推荐大家自定义函数,然后通过apply
和lambda
方法搭配使用
往
期
回
顾
资讯
活体人脑细胞5分钟学会打游戏
资讯
AI 技术大牛纷纷回归学术界
资讯
AI语言模型是否越大越好?
技术
从深度学习到深度森林方法
分享
点收藏
点点赞
点在看
相关文章:

前端工程师成长之多读好书
1 引言 乱七八糟的书看了很多,有一本讲JavaScript的印象特别深开篇说的是"JavaScript是Java的脚本语言",但还是看完了,最后忘了书名。 下面列的这些都是看过后至少记得起书名的,也有部分是经常看的书,一起列…

linux下配置vnc的方法
网上这样的文章很多了,好多前辈们都把自己的经验配置共享出来,受益匪浅,现在整理一下。 下面摘录的两篇文章各有侧重,结合起来可以配置的比较完善了。总结一下,只需要四步:step1 在当前linux系统用户us…

用 Python 画圣诞树的 N 种玩法
作者 | 写代码的明哥来源 | Pyhton编程时光马上就是圣诞节了,先提前祝大家圣诞快乐!今天来给大家分享一波如何使用 Python 来画一颗圣诞节树,包含多种版本,从平民版到豪华版,像极了一个程度员从入门到高级秃头程序员的…
ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL
前面的两篇文章中。我们对NHibernate已经做了大致了解 《ORM利器:NHibernate(一)简单介绍》Nhibernate的作用:攻克了对象和数据库的转化问题 《ORM利器:NHibernate(二)使用CodeSmith高速生成映射…

Linux学习笔记8——bash基本概念
一个操作系统的组成中,shell是与用户最接近的部分shell:外壳,也是一种程序GUI:Gnome,KDE,XfaceCLI:sh,csh,ksh,bash,tcsh,zshLinux中大多使用bash…

UIScrollView offset in UINavigationController
转:UIScrollView offset in UINavigationController 通过设置viewCtronller的 self.automaticallyAdjustsScrollViewInsets NO; 禁用苹果scrollview提供的自适应功能。 延伸阅读:https://developer.apple.com/library/ios/documentation/UserExperience…

AI 通过眼睛的反光度,来识别是否 Deepfake 换脸
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) Deepfake 是一种 AI换脸工具,现被滥用,从虚假宣传活动到插入一些违法内容,并且篡改后的图像是难以被检测到的。 一种新的 AI 工具提供了一项令人惊讶的简单方法来发现…

[异常笔记] spring boot 启动-2018040201
异常 1、编码引发异常 00:59:49.311 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 00:59:49.318 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for re…

maven基础概念学习1
2019独角兽企业重金招聘Python工程师标准>>> 1.maven是什么? 百度百科: Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 2.maven的作用? 构建、文档…

php session 二位数组
最普通的用法:一个变量名 $_SESSION[user] 0;echo $_SESSION[user]; 使用数组: $_SESSION[user][a] 1;$_SESSION[user][b] 2;echo $_SESSION[user][a];echo $_SESSION[user][b]; 这样的好处是可以分组可以 $_SESSION[admin][a] 11;$_SESSION[admin][…

「屋漏偏逢连夜雨」,Log4j 漏洞还没忙完,新的又来了
整理 | 郑丽媛、禾木木 出品 | CSDN 这几天,Apache Log4j 2 绝对是众多 Java 程序员提到的高频词之一:由于 Apache Log4j 2 引发的严重安全漏洞,令一大批安全人员深夜修 Bug、打补丁。此次漏洞更是因为其触发简单、攻击难度低、影响人群广泛等…

利用gevent实现异步执行任务
import gevent def task(pid):gevent.sleep(2)print ("task %s done"%pid)def asynchronous():threads [gevent.spawn(task,i) for i in xrange(5)]gevent.joinall(threads)if __name__ __main__:print ("asynchronous")asynchronous()执行结果ÿ…

清理SQL多余登录信息
服务器列表、登陆帐户、密码等信息都记录在 %AppData%\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin (2008)%AppData%\Microsoft\Microsoft SQL Server\90\Tools\Shell\mru.dat(2005)直接删除后重新启动 SSMS …

AI 真的能够理解人类语言吗?
作者 | Melanie Mitchell 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 2011年,IBM 的人工智能系统沃森参加综艺节目《危险边缘》,并获得了冠军,当时他们宣称:“沃森能够理解自然语言的所有歧义和复杂…

【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
题意:给你一个矩阵,有些点是黑的,让你横切h刀,纵切v刀,问你是否能让切出的所有子矩阵的黑点数量相等。 设黑点总数为sum,sum必须能整除(h1),进而sum/(h1)必须能整除(v1)。 先考虑横行࿰…
友盟数据—值得手游创业者关注的玩家数据
友盟数据—值得手游创业者关注的玩家数据 你知道“辣妈”是什么游戏的忠诚玩家吗?你知道“大龄玩家”都喜好怎样的游戏?你知道哪类玩家最“多金”?2015年,不仅宅男、宅女们爱玩游戏,辣妈和奶爸们也成了手游行业的主力军…

这个 AI 模型火上 GitHub 热榜第一,在线修复照片
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)AI 正在对照片编辑产生重大的影响,但结果是还存在很大分歧。支持者说,人工智能释放了新的艺术历年,减少了创作者花在单调工作上的时间。然而,批评者认为这些…
【我的Android进阶之旅】解决SDK升级到27.0.3遇到的GLIBC_2.14 not found、no acceptable C compiler found in $PATH等问题...
一、问题一:Failed to find Build Tools revision 27.0.3 1.1、问题描述 最近公司的Android项目都要进行SDK升级,目前在本地编译的时候将SDK升级到了27.0.3,本地运行正常,然后在jenkins服务器上跑的时候就会出现异常。异常如下所示…

解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性。下面从我理解的角度,谈谈异常处理的方方面面。我的设计仅仅限定于Windows Forms,供参考。 1 定义异常类型 .NET 框架定义很多异常类型,ERP系统中…

内含福利|CSDN 携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!
伴随云原生技术的成熟与落地,越来越多框架、中间件等开源项目相继涌现,帮助开发者和企业有效解决业务问题。2022年1月8日,CSDN携手字节跳动基础架构,将在北京举办第四场云原生线下Meetup。在这里,您可以与众多开源技术…

用Thymeleaf在前台下拉列表取值
转自:https://blog.csdn.net/u013600907/article/details/76165748转载于:https://www.cnblogs.com/sharpest/p/8875698.html

PHP使用JSON
JSON 基础 简 单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看…

(原创)Python文件与文件系统系列(5)——stat模块
stat模块中定义了许多的常量和函数,可以帮助解释 os.stat()、os.fstat()、os.lstat()等函数返回的 st_result 类型的对象。 通常使用 os.path.is*() 这类函数来测试一个文件的类型,这些方法对同一个文件进行多次测试时,stat()系统调用都是不可…

Azure Neural TTS能让AI语音自然逼真到什么程度?
摘要:微软Azure Neural TTS让AI语音像真人一样富有感情,自然逼真。 Neural TTS(神经网络文本转语音)是微软Azure认知服务的强大语音合成功能,自推出以来,已被广泛应用于从语音助手、新闻阅读到有声读物创作…

ReentrantLock与synchronized
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用 synchronized ,如…

EXT按钮事件
在EXT中,当我们要为按钮点击添加处理function的时候,可以看到一般人的实现分成2类:1.使用onClick: function xx()2.使用handler: function xx()完成后,我们会发现,无论用哪一种实现,再点击按钮时都能触发xx…

浅谈HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而H…

达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!
整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)作为“一所探索科技未知的研究院”,阿里巴巴达摩院成立至今已经四年了。这四年来,达摩院秉持着“探索科技位置,以人类愿景为驱动力,开展基础科学和颠覆式…
TensorFlow——入门基础
TensorFlow原理: TensorFlow使用Graph来描述计算任务,图中的节点被称之为op.一个op可以接受0或多个tensor作为输入,也可产生0或多个tensor作为输出.任何一个Graph要想运行,都必须借助上下文Session.通过Session启动Graph,并将Graph中的op分发到CPU或GPU上,借助Sessi…

EXT iconCls说明
今天学习ext 看examples中的事例,其中有一个地方是这样写的: new ButtonPanel( Icon Only, [{ iconCls: add16 },{ iconCls: add24, scale: medium },{ …