返回顶部
首页 > 资讯 > 后端开发 > Python >Pandas搭配lambda组合使用详解
  • 120
分享到

Pandas搭配lambda组合使用详解

2024-04-02 19:04:59 120人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

导入模块与读取数据 我们第一步需要导入模块以及数据集 import pandas as pd df = pd.read_csv("IMDB-Movie-Data.csv") d

导入模块与读取数据

我们第一步需要导入模块以及数据集


import pandas as pd

df = 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'

这里我们还是采用applylambda相结合,来实现上面的功能


#创建一个新的列来存储每一影片名的长度
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方法实现数据类型转换就会报错,因此我们还需要将到applylambda结合进行数据的清洗,代码如下


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 "值得观看")))

看上去稍微有点凌乱了,这个时候,小编这里到还是推荐大家自定义函数,然后通过applylambda方法搭配使用。

到此这篇关于Pandas搭配lambda组合使用详解的文章就介绍到这了,更多相关python Pandas 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Pandas搭配lambda组合使用详解

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

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

猜你喜欢
  • Pandas搭配lambda组合使用详解
    导入模块与读取数据 我们第一步需要导入模块以及数据集 import pandas as pd df = pd.read_csv("IMDB-Movie-Data.csv") d...
    99+
    2024-04-02
  • Python之Pandas使用详解
    Pandas 在数据分析当中,我们通常使用 Pandas 来做数据清理的工作。在真实的工作生活中,我们拿到的数据往往都是不整洁的,空值、重复值、无效值等等信息都会干扰我们的分析,此时我们就需要按部就班的完成数据的清理。数据清理是数据分析中非...
    99+
    2023-09-05
    pandas python 开发语言
  • Java创建线程及配合使用Lambda方式
    目录一、创建线程三种方式1.1 继承Thread类创建线程类1.2 通过Runnable接口创建线程类使用Lambda表达式1.3 通过Callable和Future创建线程使用La...
    99+
    2024-04-02
  • python如何将Lambda与map功能配合使用
    小编给大家分享一下python如何将Lambda与map功能配合使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!将Lambda与map功能配合使用该函数可以用python中的lambda函数替换。 创建以下程序以创建数字...
    99+
    2023-06-27
  • Bean Searcher配合SpringBoot的使用详解
    先吐槽一下,现在的Bean Searcher操作手册的指引弱的可怜…对我这样的小白及其不友好 话不多说直入主题 1、首先肯定是得引入依赖 <dependency&...
    99+
    2024-04-02
  • Python Pandas数据合并pd.merge用法详解
    目录前言语法参数 1.连接键2.索引连接 3.多连接键 4.连接方法 5.连接指示 总结 前言 实现类似SQL的join操...
    99+
    2024-04-02
  • Pandas条件筛选与组合筛选的使用
    目录条件筛选组合筛选在使用pandas进行数据分析时,经常需要根据逻辑条件来筛选数据。 如果使用 for循环语句 遍历的方式来查找,将十分耗时。 推荐使用pandas自身的功能函数进...
    99+
    2023-01-16
    Pandas条件筛选 Pandas 组合筛选 Pandas条件筛选 组合筛选
  • pandas数据合并之pd.concat()用法详解
    目录一、简介二 、代码例1:上下堆叠拼接例2:axis=1 左右拼接一、简介 pd.concat()函数可以沿着指定的轴将多个dataframe或者series拼接到一起。...
    99+
    2024-04-02
  • SpringCloud Bus组件的使用配置详解
    目录什么是Bus搭建RabbitMQ服务实现自动配置刷新指定服务刷新配置集成webhook实现自动刷新什么是Bus 0.解释 https://spring.io/projects/s...
    99+
    2024-04-02
  • Pandas中的 transform()结合 groupby()用法示例详解
    首先,假设我们有如下餐厅数据集: import pandas as pd df = pd.DataFrame({ 'restaurant_id': [101,102,103...
    99+
    2024-04-02
  • Python-pandas:数据合并merge函数用法详解
    一、语法格式 介绍一下数据分析中很常用的一个函数——merge,它能够进行高效的数据合并操作。先看一下语法格式及其初步解释: pd.merge(left: 'DataFrame | Series', # 左右两个需要合并的DataFram...
    99+
    2023-09-14
    pandas python 数据分析
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2024-04-02
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • 详解Pandas中GroupBy对象的使用
    目录使用 Groupby 三个步骤将原始对象拆分为组按组应用函数AggregationTransformationFiltration整合结果总结今天,我们将探讨如何在 Python...
    99+
    2024-04-02
  • Pandas库中iloc[]函数使用详解
    1 iloc[]函数作用 iloc[]函数,属于pandas库,全称为index location,即对数据进行位置索引,从而在数据表中提取出相应的数据。 2 iloc函数使用 df...
    99+
    2023-05-15
    Pandas iloc[ ]函数 Pandas iloc函数
  • 功能强大的TraceId 搭配 ELK使用详解
    目录引言需求分析ESkibanaLogstashLogbackFilebeat最后引言 之前写了一篇关于 TraceId 的文章:为全局请求添加 TraceId ,看日志再也不懵逼 ...
    99+
    2024-04-02
  • C++ lambda 表达式如何与标准算法库配合使用?
    c++++ lambda 表达式与标准算法库紧密协作,允许创建匿名函数,简化对数据的处理。具体用途包括:排序向量:使用 lambda 表达式对元素进行排序。查找元素:使用 lambda ...
    99+
    2024-04-17
    c++ lambda 代码可读性
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2024-04-02
  • Java中Lambda表达式使用详细解读
    目录前言一、Lambda表达式的简介二、Lambda表达式对接口的要求1.函数式接口2.@FunctionalInterface3.Lambda表达式的语法1.Lambda表达式的基...
    99+
    2023-05-18
    java  Lambda表达式使用 java  Lambda表达式 Lambda表达式使用
  • 详解如何导入和使用pandas库
    Pandas库是Python中最常用的数据处理和分析工具之一,它提供了丰富的数据结构和函数,能够高效地处理和分析大规模的数据集。本文将详细介绍Pandas库的导入和使用方法,并给出具体的代码示例。 一、Pandas库的导入Pan...
    99+
    2024-01-24
    使用方法 导入 pandas库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作