精华内容
下载资源
问答
  • Python中的lambda函数

    万次阅读 多人点赞 2019-03-30 19:41:51
    Python中的lambda函数 在Python中,我们使用lambda关键字来声明一个匿名函数,这就是为什么我们将它们称为“lambda函数”。匿名函数是指没有声明函数名称的函数。尽管它们在语法上看起来不同,lambda函数的行为方式...

    Python中的lambda函数

    在Python中,我们使用lambda关键字来声明一个匿名函数,这就是为什么我们将它们称为“lambda函数”。匿名函数是指没有声明函数名称的函数。尽管它们在语法上看起来不同,lambda函数的行为方式与使用def关键字声明的一般函数相同。以下是Python中 lambda函数的特点:

    lambda函数可以接受任意数量的参数,但函数只能包含一个表达式。表达式是lambda函数执行的一段代码,它可以返回任何值,也可以不返回任何值。

    lambda函数可以返回函数对象。

    从语法上讲,lambda函数只能有一个表达式。

    在本文中,我们将详细讨论Python中的lambda函数,并演示使用它们的例子。

    创建一个lambda函数

     

    我们使用以下语法来声明lambda函数:

    lambda argument(s):expression

    正如上面所述,我们可以有很多个参数,但是只能有一个表达式。lambda操作符不能有任何声明,它返回一个函数对象,我们可以将此函数对象赋值给任何变量。

    例如:

    remainder = lambda num: num %2
    print(remainder(5))
    

    输出:

    1

    这段代码中,lambda num: num% 2是lambda函数。num是参数,num%2是表达式,用来计算后返回结果。该表达式获取输入参数除以2的模数并返回。将5作为参数传入,通过除以2进行计算,得到余数1.

    你应该注意到,上面脚本中的lambda函数没有分配任何名称。它只是返回一个函数对象,该对象被分配给标识符remainder。然而,尽管函数是匿名的,我们还是可以像调用普通函数那样调用它。声明语句如下:

    lambda num: num %2

    和以下代码相似:

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def remainder(num):
        return num & 2

    以下是另一个lambda函数的例子:

    product = lambda x, y: x * y 
    print(product(2.3))

    输出:

    6

    上面定义的lambda函数返回一个product对象,该对象具有两个参数的值。

    为什么使用lambda 函数?

    Lambda函数主要在短时间内需要一个函数时才使用。当你想要将函数作为参数传递给高阶函数(即以其他函数作为参数的函数)时,通常使用这种方法。

    下面的例子演示了在其他函数中使用匿名函数:

    def testfunc (num):
        return lambda x: x * num

    在上面的例子中,我们有一个函数,该函数传入一个参数,将它与一个未知数相乘。我们来演示一下怎样使用上面的函数:

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def testfunc(num):
        return lambda x : x * num
    result1 = testfunc(10)
    print(result1(9))

    输出

    90

    在上面的脚本中,我们使用一个lambda函数与我们传入的数字10相乘。同样的函数也可以用来与数字1000相乘。

    def testfunc(num):
        return lambda x : x * num
    result2 = testfunc(1000)
    print(result2(9))

    输出:

    9000

    我们很有可能会使用到testfunc( )函数来在一个程序中定义上面的两个lambda函数:

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def testfunc(num):
        return lambda x : x * num
    
    result1 = testfunc(10)
    result2 = testfunc(1000)
    
    print(result1(9))
    print(result2(9))

    输出:

    90
    9000

    Lambda函数可以和Python的内置函数一起使用,例如map(),filter()等。

    在接下来的章节中,我们将讨论怎样在各种Python内置函数中使用lambda函数。

    filter() 函数

    Python中的filter( )函数接受一个列表参数和一个lambda函数参数。它的语法如下:

    filter(object, iterable)

    这里的object必须是一个返回布尔值的lambda函数。对迭代器中的每一项都会调用该函数来计算其结果是True或False。请注意,本函数只能接受一个迭代器作为输入。

    lambda函数,和需要被处理的列表,被一同传递给filter( )函数。filter()函数将返回一个新的列表,新的列表中只包含旧列表中被lambda函数处理后返回值为True的那些元素。请参考下面给出的例子:

    numbers_list =[2,6,8,10,11,4,12,7,13,17,0,3,21]
    filtered_list = list(filter(lambda num: (num > 7),numbers_list))
    print(filtered_list)

    输出:

    [8, 10, 11, 12, 13, 17, 21]

    在上面的例子中,我们先创建了一个包含一系列整数的列表number_list,接着我们创建了一个lambda函数来检查大于7的整数。此lambda函数作为参数传递给filter()函数,过滤后的结果保存在一个名为filtered_list的新列表中。

    map( ) 函数

    map( )函数是另一个以一个函数对象和一个列表作为参数的内置函数。map函数的语法如下:

    map(object,iterable_1,iterable_2, ...)
    

    传入map()函数的迭代器可以是字典,列表等。map()函数主要是根据lambda函数定义的逻辑来将输入迭代器中的每一项映射到输出迭代器中的相关项。请参考以下的例子:

    numbers_list =[2,6,8,10,11,4,12,7,13,17,0,3,21]
    mapped_list = list(map(lambda num: num %2,numbers_list))
    print(mapped_list)

    输出:

    [0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]

    在上面的脚本中,我们先定义了一个由随机数组成的列表numbers_list,接着我们调用map()函数,并传递一个lambda函数作为参数。此lambda函数计算每个数除以2之后的余数。映射的结果保存在一个名为mapped_list的列表中。最后,我们打印出列表的内容。

    结论

    在Python中,一个lambda函数是一个只有一行代码的函数,不需要进行函数名声明,它可以有很多个参数,但是只能有一个表达式。它和使用Python关键字def声明的函数具有相似的功能。大多数情况下,lambda函数只作为参数传递给其他函数。

    在本文中,我们讲解了广泛使用的lambda函数的语法,用例以及实例。

    展开全文
  • 上一篇文章介绍了 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

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

    展开全文
  • 我试着根据像这样的数据框中一个人的大小推断出一个分类:Size1 800002 80000003 8000000000...我希望它看起来像这样:Size...我知道理想的过程是应用这样的lambda函数:df['Classification']=df['Size'].apply(lamb...

    我试着根据像这样的数据框中一个人的大小推断出一个分类:Size

    1 80000

    2 8000000

    3 8000000000

    ...

    我希望它看起来像这样:Size Classification

    1 80000 <1m

    2 8000000 1-10m

    3 8000000000 >1bi

    ...

    我知道理想的过程是应用这样的lambda函数:df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else "1-10m" if 1000000

    我检查了一些关于lambda函数here is an example link中多个ifs的帖子,但是synthax在多个ifs语句中由于某些原因不适合我,但它在一个if条件下工作。

    所以我尝试了这个“非常优雅”的解决方案:df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: "1-10m" if 1000000 < x < 10000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: "10-50m" if 10000000 < x < 50000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: "50-100m" if 50000000 < x < 100000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: "100-500m" if 100000000 < x < 500000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: "500m-1bi" if 500000000 < x < 1000000000 else pass)

    df['Classification']=df['Size'].apply(lambda x: ">1bi" if 1000000000 < x else pass)

    计算出“pass”似乎也不适用于lambda函数:df['Classification']=df['Size'].apply(lambda x: "<1m" if x<1000000 else pass)

    SyntaxError: invalid syntax

    对于Pandas中apply方法中lambda函数中的multiple if语句,有什么关于synthax的正确建议吗?不管是多行还是单行解决方案对我都有效。

    展开全文
  • 这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下lambda表达式是一种匿名函数,对应python中的自定义函数def,...

    这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法。作为python初学者,本文整理了lambda的一些基本用法和特点。

    lambda和def的对应关系

    定义func函数,计算给定数x的平方

    def func(x):

    return x*x

    等价于

    func = lambda x: x*x

    其中func是函数名,x是输入参数,x*x是输出结果

    输入参数可以有多个,可以接收不定参数如*args或者**kwargs。

    f = lambda x, *args, para, **kwargs : [args, para, kwargs]

    f(1, 2, 3, para="number", name="Jack", sex="male")

    # 输出 [(2, 3), "number", {"name": "Jack", "sex": "male"}]

    有时也可以不指定输入参数,如:

    lambda: random.randn()

    lambda与map(), filter(), reduce()

    lambda表达式返回一个函数,这个函数可以作为其他函数的参数。常用的可以与lambda组合的内置函数有map(), filter(), reduce().

    在处理一个可迭代对象如列表,字典等时,可以用map(lambda, x) 代替 for...in...循环,如:

    lst = [1, 2, 3, 4, 5]

    res = []

    for i in lst:

    a = i*i

    res.append(a)

    等价于

    res = list(map(lambda x:x*x, lst))

    可以看到这里的lambda生成的函数直接作为map函数的function参数,对列表的每一个元素进行平方计算

    同理可以将lambda用于filter进行筛选,或者reduce累积运算:

    from functools import reducelst = [1, 2, 3, 4, 5]f_res = filter(lambda x: x>3, lst)

    r_res = reduce(lambda x, y: x*y, lst)

    print("大于3的数字有:", list(f_res))

    print("累乘结果为:", r_res)

    输出结果:

    大于3的数字有: [4, 5]

    累乘结果为: 120

    lambda与if条件判断

    lambda表达式中可以插入if...else进行条件判断,如

    f = lambda x: "even" if x%2==0 else "odd"

    # f(3)输出结果 odd

    等价于

    def f(x):
      if x%2==0:
        return "even"
      else:
        return "odd"

    注意如果在lambda中使用if进行条件判断,则else是必须声明的,否则会引起报错。如果不返回结果可以用 else None 表示。

    if...elif...else的多条件判断也可以用于lambda,但会使得代码过于复杂,所以不推荐。

    lambda在pandas中的使用

    lambda函数常用于DataFrame或者Series对象下的map、apply、transform方法

    import pandas as pd

    df = pd.DataFrame({"Age": [22, 21, 22, 21, 20], "Score": [87, 66, 79, 54, 59]})

    df["Pass"] = df.apply(lambda x: "pass" if x[1]>=60 else "Not pass", axis=1)

    输出新列 "Pass",根据成绩判断通过与否,输出df后结果为:

    Age Score Pass

    0 22 87 pass

    1 21 66 pass

    2 22 79 pass

    3 21 54 Not pass

    4 20 59 Not pass

    x为DataFrame对象,当参数axis=1时,x[1]等于第二列。

    当用于Series对象时,以上代码等价于:

    df["Pass"] = df["Score"].apply(lambda x: "pass" if x>60 else "Not pass")

    在pandas中,通过apply,map, transform方法,lambda可以直接应用于Series级别的运算。

    当使用applymap方法时,lambda可以应用于DataFrame级别的运算。

    lamda的优缺点

    lambda的优点:

    不需要定义函数名(匿名函数)

    代码简洁美观

    适用于定义简单的计算

    lambda的缺点:

    只有一个运算式,不适用于复杂的计算

    不够直观,难于理解,增加了维护成本

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

    展开全文
  • 这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下lambda表达式是一种匿名函数,对应python中的自定义函数def,...
  • Lambda 函数是 Python 中的匿名函数。当你需要完成一件小工作时,在本地环境中使用它们可以让工作得心应手。有些人将它们简称为 lambdas,它们的语法如下:关键字可以用来创建一个 lambda 函数,紧跟其后的是参数...
  • 我有一个应用,需要使用pandas去mysql数据库里用pd. read_sql方法读取数据,进行一定处理后通过数据可视化组件Pyecharts在网页上进行可视化展示,图形为折线图,在显示时发现有些系列(series)的值不显示,查看...
  • Lambda 函数是 Python 中的匿名函数。当你需要完成一件小工作时,在本地环境中使用它们可以让工作得心应手。有些人将它们简称为 lambdas,它们的语法如下:lambda arguments: expression 复制代码lambda 关键字可以...
  • 场景如下:现在有一个dataframe,其中一列为score,值从0-100,df:score988837688633现在需要增加一列level,给这些分数分类,90分...import pandas as pdlist = [98,88,37,68,86,33]df = pd.DataFrame(list, co...
  • 创建一个pandas表格 import numpy as np import pandas as pd df1=pd.DataFrame(np....lambda函数 对列 f = lambda x: x.max() - x.min() df1.apply(f) 对行 df1.apply(f, axis=1) fs = lambda x: pd.Series(
  • 我试图根据像这样的数据框中的人的大小来推断分类:Size1 800002 80000003 8000000000...我希望它看起来像这样:Size ...我理解理想的过程是应用这样的lambda函数:df['Classification']=df['Size'].apply(lambda ...
  • lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法。作为python初学者,本文整理了lambda的一些基本用法和特点。lambda和def的对应关系定义func函数,计算给定数x的...
  • lambda表达式 map与lambda lambda和apply
  • 使用函数可以简化计算,ufnc 函数即有这样的功能,并且可以和pandas 更好的结合,具体可以该参考下述代码示例: cdf1 = pd.DataFrame(np.arange(10).reshape(2,5),columns=list('bcaed')) cdf2 = pd.DataFrame(np.a...
  • Define: 匿名函数lambda函数:指一类无需定义标识符(函数名)的函数或子程序。所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的、在同一行中定义函数的方法。 Feature: 功能简单:...
  • Python中lambda函数用法

    2019-09-09 08:44:16
    1、先来看一个函数: def sum(x,y): ...2、传入一个参数的lambda函数 a=lambda x:x*x print(a(2)) # 注意:这里直接a(2)可以执行,但没有输出的,因为没有print 3、多个参数的lambda形式: ...
  • Python Lambda函数使用总结详解 这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lambda表达式是一种匿名函数...
  • Pandas还有个最常用的操作字段,这样才能把数据清洗干净,为统计分析顺滑使用提供基础。本文分3个部分介绍:修改或新增字段、字段类型转换、总结。 1、字段变换(修改或新增字段) 1.1 lambda表达式 有必要再次...
  • pandas新字段(数据列)生成、使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战 pandas apply用法: pandas apply方法的作用原理和map方法类似,区别在于apply能够传入功能更为复杂的函数...
  • 例1:传入多个参数的lambda函数 def sum(x,y): return x+y 用lambda来实现: p = lambda x,y:x+y print(p(4,6)) 例2:传入一个参数的lambda函数 a=lambda x:x*x print(a(3)) # 注意:这里直接a(3)可以执行,但没有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,477
精华内容 7,790
关键字:

lambda函数pandas