精华内容
下载资源
问答
  • lambda函数 pandas
    千次阅读
    2019-10-14 20:54:43
    # 注意 函数 formula() 一定要有返回值,否则下面 apply 函数不起作用
    def formula(x):
        if x in slidetime_dict:
            return slidetime_dict[x]
        else:
            return 15
     
    df['slidetime'] = df.apply(lambda row: formula(row['A']), axis=1)

    注意:

    pandas 使用 apply() 函数时,被调用的函数(本例中是 formula())中各种条件分支都要有 return 返回值,否则生成的结果不对。

    更多相关内容
  • Pandas还有个最常用的操作字段,这样才能把数据清洗干净,为统计分析顺滑使用提供基础。本文分3个部分介绍:修改或新增字段、字段类型转换、总结。 1、字段变换(修改或新增字段) 1.1 lambda表达式 有必要再次...

    Pandas还有个最常用的操作字段,这样才能把数据清洗干净,为统计分析顺滑使用提供基础。本文分3个部分介绍:修改或新增字段、字段类型转换、总结。

    1、字段变换(修改或新增字段)

    1.1 lambda表达式

    有必要再次补充下lambda表式式的用法,在字段变换中是常用有用的一个操作,需要掌握。

    1.2 map、apply、applymap、assign

    参数文章,易执:Pandas教程 | 数据处理三板斧——map、apply、applymap详解,写得很详细。

    2、字段类型转换

    参考文章,杨航锋:Pandas数据类型转换的几个小技巧,也写得很详细。

    3、总结

    (1)apply、map、assign、pipe、applymap等函数,可灵活对字段进行修改或新增。

    (2)从Mysql读出的数据类型有时不准确,手动转换比较低效,可以考虑orm技术或封装自动配置映射,后续分享。

    (3)从Mysql取数也已经封装起来了,在案例中直接调用即可,只关注query内容,不用关注如何连接了。

    (4)此前文章已经分享过匿名函数或lambda表达式,在字段变换中是常用有用的一个操作,需要掌握。

    还有更多实用操作,请关注下一篇文章。请留言获取源码。

    展开全文
  • 这篇文章来讲讲lambda方法以及它在pandas模块当中的运用,熟练掌握可以极大地提高数据分析与挖掘的效率。导入模块与读取数据我们第一步需要导入模块以及数据集importpandas...

    这篇文章来讲讲lambda方法以及它在pandas模块当中的运用,熟练掌握可以极大地提高数据分析与挖掘的效率。

    导入模块与读取数据

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

    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代表跨行,如下图所示

    52debd257d55998263cc7fd5992716b3.png

    筛选数据

    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

    d94dce969e88fb660b9bc9213ffab6b3.png

    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方法搭配使用

    
     
    
     
    
     
    
     
    
     
    往期精彩回顾
    
    
    
    
    适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
    AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

    本站qq群955171419,加入微信群请扫码:

    cac5a884eeaa06b2e8113d71dde7f1e8.png

    展开全文
  • 上一篇文章介绍了 Pandas 的基本函数的使用方法,这篇文章主要介绍 Pandas 的条件筛选和排序功能,同样也是借助于一个小案例!1,读入数据先利用 read_csv() 函数 把数据都进来,这个数据是一个商品类目的数据,里面...

    40f94136cceee4e4875e04c86445fbea.png

    上一篇文章介绍了 Pandas 的基本函数的使用方法,这篇文章主要介绍 Pandas 的条件筛选和排序功能,同样也是借助于一个小案例!

    1,读入数据

    先利用 read_csv() 函数 把数据都进来,这个数据是一个商品类目的数据,里面有 quantity(类)、name(名字)、description(描述)、price(价格)等几个属性:

    import pandas as pd
    url = "https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv"
    
    chipo = pd.read_csv(url,sep = 't')
    chipo
    

    d1ad396cd8f1bb536f4f872faa050831.png

    2,更改某一列的数据类型、字符名

    读入的数据中价格列中存在 “$”字符,做数据处理时,需要把该符号去除,这里提供两种方式:

    1,list 与 series 替换;先把 某一列每个数据进行格式替换得到list,list 再赋值给需要替换的那一列;

    prices = [float(value[1:-1]) for value in chipo.item_price]
    chipo.item_price = prices
    

    2,利用 apply() 和 lambda 函数进行替换;

    chipo['item_price'] = chipo['item_price'].apply(lambda x:float(x[1:-1]))
    

    cd8dbd7b3f3fdb111138eb19ef206b33.png

    3,剔除多列中重复出现的数据

    处理数据时经常会出现数据冗余现象,这时需要提前剔除数据中冗余的数据(行中多列数据重复的现象),用到的函数为 drop_duplicates(['列名1','列名2'])函数

    这里 去除的是 item_name、quantity、choice_description 三列中同时重复的数据:

    chipo_filtered = chipo.drop_duplicates(['item_name','quantity','choice_description'])
    chipo_filtered
    

    30f4d0af56aba9ea79de8750117a0865.png

    4,条件筛选

    1,筛选出 quantity 值为1的数据:

    chipo_one_prod = chipo_filtered[chipo_filtered.quantity==1]
    chipo_one_prod
    

    621cd4919026a744c534ed93c7b0b61c.png

    2,在1的基础上,筛选出 item_price大于10 的数据,并利用 nunique 查看 item_name 不重复的数据个数:

    chipo_one_prod[chipo_one_prod['item_price']>10].item_name.nunique()
    
    
    # 输出结果
    # 25 
    

    3,2 中的条件筛选也可用 语句进行筛选:

    chipo.query("item_price>10")
    

    3ecbb1f5d6997ab3862e3c580ef743c5.png

    4,多条件筛选数据,筛选出同时满足 item_name 为 Chicken Bowl 和 quantity 为1的数据

    chipo[(chipo['item_name']=='Chicken Bowl')&(chipo['quantity']==1)]
    

    621cd4919026a744c534ed93c7b0b61c.png

    5,4 中用的 &(与) 衔接条件语句,这里尝试以下 |(或):

    需满足 item_name 不为Chicken Bowl 或者 quantity 为1的数据

    chipo[(chipo['item_name']!='Chicken Bowl')|(chipo['quantity']!=1)]
    

    03e6962b8b212ae7211581b6e3e301c5.png

    4,对指定列数据排序

    1,对某一列数据排序,最终结果只展示排序后这一列的结果,命令语句:data.列名.sort_values() ,例如这里以 item_name 这一列数据进行排序:

    chipo.item_name.sort_values()# Sorting the values
    

    f93c64326ed64d1ff26ab4ca36d60129.png

    2,而 data.sort_values(by=列名) 是以某列数据进行排序,对应其他列数据下也需要位置改变,最终展示的排序后的全部数据

    chipo.sort_values(by = 'item_name')
    

    c4b01bb9d9ed2ab22de77d5b5b2d3e83.png

    3,2中的进阶应用,例如,这里我想看数据中价格最贵的商品名称,这里先用2的方法 对 item_price 进行逆排,然后提取排序后数据第一行的item_name

    chipo.sort_values(by = 'item_price',ascending = False).head(1).item_name
    
    # 打印结果
    # 3598    Chips and Fresh Tomato Salsa
    Name: item_name, dtype: object
    

    5,data.loc 方法筛选数据

    注意一下:利用data.loc 方法筛选数据时,只能以 行名、列名作为筛选条件

    1,筛选出 行名为2、3,列名为 quantity、item_name、item_price的数据

    chipo.loc[[2,3],['quantity','item_name','item_price']]
    

    98eb5d1d650e2cf86007a7bfde27aa0b.png

    2,对行名不做限制,只筛选出列名为quantity、item_name 数据

    chipo.loc[:,['quantity','item_name']]
    

    bb754c6fb4126922c232439fc22b19fc.png

    3,对列名不做限制,只筛选出行名为5、6的 数据

    chipo.loc[[5,6],:]
    

    712fafec83edf31476a1e897a5e4d7ac.png

    4,综合应用筛选出:行名能被8整除、列名为 item_price、item_name 的两列数据

    chipo.loc[chipo.index%8==0,['item_name','item_price']]
    

    ec9b47a02aefce2f19435ab16a558510.png

    6,data.iloc 方法筛选数据

    data.iloc 与 data.loc 方法想法,只能以索引值进行晒选,不能以列名、行名作为筛选条件

    1,筛选出第 5-8行、2-3 列的数据

    chipo.iloc[4:8,1:3]
    

    97027e0f34169968c38d249623331787.png

    2,筛选出第 2-4 行数据;

    chipo.iloc[1:4,:]
    

    8009beb5114136dcb45c398df2470062.png

    3,筛选出前两列数据:

    chipo.iloc[:,:2]
    

    d0c7ebfbac75a80209c639ef1ee384b1.png

    以上就时本篇文章的全部内容啦,对里面某些方法的应用不太熟悉的小伙伴们记得跟着代码敲一遍,加深下理解!

    展开全文
  • Python 之 lambda 函数完整详解 & 巧妙运用

    万次阅读 多人点赞 2019-04-01 20:40:29
    lambda 函数在 Python 编程语言中使用频率非常高,那么,什么是lambda?它有哪些用法? 本文参考: https://blog.csdn.net/zjuxsl/article/details/79437563 这里总结了关于 Python 中的 lambda 函数的“一个语法,...
  • 场景如下: 现在有一个dataframe,其中一列为...import pandas as pd list = [98,88,37,68,86,33] df = pd.DataFrame(list, columns=['score']) # convert list to dataframe df['level'] = '' # add a column def judg
  • 作者 | 俊欣来源 | 关于数据分析与可视化这篇文章小编来讲讲lambda方法以及它在pandas模块当中的运用,熟练掌握可以极大地提高数据分析与挖掘的效率导入模块与读取数据我们第一步需要...
  • Pandas中使用lambda表达式

    万次阅读 2019-03-19 23:01:16
    DataFrame中有apply函数,可以对DataFrame进行函数式操作。 例子: from pandas import DataFrame import pandas as pd import numpy as np df = DataFrame(np.random.randn(4,4),columns=[‘a’,‘b’,‘c’,‘d’]...
  • Python中lambda函数用法

    千次阅读 2021-05-28 15:33:58
    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。 1.为什么要用lambda函数? 先举一个例子:...
  • 什么是 Python 中的 Lambda 函数lambda 函数是一个匿名函数(即,没有名称定义),它可以接受任意数量的参数,但与普通函数不同,它只计算并返回一个表达式Python 中的 lambda 函数使用以下语法表达:lambda 参数:...
  • 来源:萝卜大杂烩今天我们来学习 Python 中的 lambda 函数,并探讨使用它的优点和局限性什么是 Python 中的 Lambda 函数lambda 函数是一个匿名函数(即,没有名称定义),它可以接受任意数量的参数,但与普通函数...
  • pandas 多列综合使用lambda

    千次阅读 2020-12-25 15:25:51
    import pandas as pd from telecomgis.LonLatGis import ModifyLonlat cell=pd.read_sql(‘ORACL网元工参’,con=officecon().engineSourcesPerformance) print(cell[[‘longitude’,‘latitude’]]) cell[‘lonlat’...
  • pandas使用apply函数和lambda函数、把所有行指定的数据列进行相加(use apply and lambda to add value in dataframe rows)
  • 使用以下数据集 close_px = pd.read_csv(u'... index_col=0) close_px.info() close_px.head(10) 如果lambda什么也不做,只是打印,可以看到groupby默认使用索引进行分组 show_index = lambda x: print
  • Lambda 函数是 Python 中的匿名函数。当你需要完成一件小工作时,在本地环境中使用它们可以让工作得心应手。有些人将它们简称为 lambdas,它们的语法如下:lambda arguments: expressionlambda 关键字可以用来创建一...
  • lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法。作为python初学者,本文整理了lambda的一些基本用法和特点。lambda和def的对应关系定义func函数,计算给定数x的...
  • 我试着根据像这样的数据框中一个人的大小推断出一个分类:Size1 800002 80000003 8000000000...我希望它看起来像这样:Size...我知道理想的过程是应用这样的lambda函数:df['Classification']=df['Size'].apply(lamb...
  • Pandas的匿名函数lambda,能够避免写简短函数也需要定义的麻烦,配合apply的使用还能实现map功能,轻松对每一行使用同样的操作。 lambda中比较熟悉A if 条件 else B的用法,即满足条件则输出A,不满足则输出B,但if ...
  • 这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下lambda表达式是一种匿名函数,对应python中的自定义函数def,...
  • df2['收益'] = df2['收益'].apply(lambda x: 10 if x==0 else x)
  • lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法。作为python初学者,本文整理了lambda的一些基本用法和特点。lambda和def的对应关系定义func函数,计算给定数x的...
  • 场景如下:现在有一个dataframe,其中一列为score,值从0-100,df:score988837688633现在需要增加一列level,给这些分数分类,90分...import pandas as pdlist = [98,88,37,68,86,33]df = pd.DataFrame(list, co...
  • pandas使用map函数lambda、replace函数替换dataframe日期数据列中的年份(year)信息(例如,统一将年份改为2050年、举一反三、修改月份、天信息类似)
  • import pandas as pd data = pd.read_csv("D:\Desktop\DXYArea (1).csv",error_bad_lines=False) print(data.columns) data['country'] = data.apply(lambda x: 1 if x.countryName == x.provinceName else 0,axis=...
  • records_df['Name'] = records_df['Name'].apply(lambda x: '基金' if x is None else x) records_df['Industry'] = records_df['Industry'].apply(lambda x: '公募基金' if x is None else x)
  • 你的方法有几个问题,这让我写了一个完整的答案。...您可以使用完整函数而不是lambdas来验证这一点:from scipy.optimize import leastsqimport numpy as npdef kellyFunc(a, b, x): #Function ...
  • 我试图根据像这样的数据框中的人的大小来推断分类:Size1 800002 80000003 8000000000...我希望它看起来像这样:Size ...我理解理想的过程是应用这样的lambda函数:df['Classification']=df['Size'].apply(lambda ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,809
精华内容 9,923
关键字:

lambda函数 pandas