当前位置:   article > 正文

python之map函数的使用_*map

*map

map(func, *iterables) --> map object

map函数对可遍历对象中的每个值进行相同的func操作,最终得到一个结果序列(map 对象)
但是生成的结果序列不会把全部结果显示出来,要想显示出全部结果,可以用list方法展现,或者用解包、遍历等方法展现。

当seq只有一个时

当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。

  1. list1 = list(range(10))
  2. list1
  3. 输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. def f(x):
  5. return 2**x
  6. print(*map(f,list1))
  7. type(map(f,list1))
  8. 输出结果:1 2 4 8 16 32 64 128 256 512
  9. 输出结果:map

map()返回的是一个map对象,可以将其转化为其他可遍历对象进行其他操作,也可通过遍历操作将将其中各个元素拿出来(也可以加*进行解包)

  1. list2 = ['apple','banana','orange']
  2. list2
  3. 输出结果:['apple', 'banana', 'orange']
  4. def f2(x):
  5. return x.capitalize()
  6. print(*map(f2,list2))
  7. 输出结果:Apple Banana Orange
  8. type(map(f2,list2))
  9. 输出结果:map

 seq为多个时

map 传入的第一个参数是个函数,所以也可以传入匿名函数

  1. test2 = map(lambda x,y:x**y,[1,2,3],[1,2,3])
  2. for i in test2:
  3. print(i)
  4. 输出结果:
  5. 1
  6. 4
  7. 27

传入的可遍历对象长度不一,会以最短的函数为准

  1. test3 = map(lambda x,y:(x**y),[1,2,3],[1,2])
  2. for i in test3:
  3. print(i)
  4. 输出结果:
  5. 1
  6. 4

懒执行模式,只有使用时才会报错

  1. test4 = map(lambda x:x**2,[1,2,3],[1,2])
  2. #懒执行模式,只有在使用时候才会报错,这一步正常执行
  3. for i in test4:
  4. print(i)
  5. 执行结果:---------------------------------------------------------------------------
  6. TypeError Traceback (most recent call last)
  7. <ipython-input-90-763bf75a253b> in <module>
  8. ----> 1 for i in test4:
  9. 2 print(i)
  10. TypeError: <lambda>() takes 1 positional argument but 2 were given

可以用来类型转换

  1. test5 = map(str,[123,23,456]) # 可以用来进行类型转换
  2. [*test5]
  3. 输出结果:['123', '23', '456']

Apply函数

Apply a function along an axis of the DataFrame.

这个函数是dataframe的函数,apply方法实现一列或一行的操作,默认是对列操作

  1. frame = pd.DataFrame(np.random.randint(1,9,(4,3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])
  2. frame
  3. 输出结果:
  4. b d e
  5. Utah 8 2 3
  6. Ohio 2 2 7
  7. Texas 6 7 7
  8. Oregon 3 6 6
  9. f = lambda x : x.max()-x.min() #匿名函数求极差
  10. frame.apply(f) #apply方法实现一列或一行的操作,默认是对列操作
  11. 输出结果:
  12. b 6
  13. d 5
  14. e 4
  15. dtype: int64
  16. frame.apply(f,axis=1) #设置axis = 1 或者axis=‘columns’会对每一行调用一次函数f
  17. frame.apply(f,axis='columns')
  18. 输出结果:
  19. Utah 6
  20. Ohio 5
  21. Texas 1
  22. Oregon 3
  23. dtype: int64
  24. Utah 6
  25. Ohio 5
  26. Texas 1
  27. Oregon 3
  28. dtype: int64

applymap()实现对df的每一个元素的函数运算

  1. format1 = lambda x: '%.xf' %x
  2. format2 = lambda x: str(x)+'wktest'
  3. frame.applymap(format1)#applymap实现对df进行逐元素执行运算
  4. frame.applymap(format2)
  5. 输出结果:
  6. b d e
  7. Utah 8f 2f 3f
  8. Ohio 2f 2f 7f
  9. Texas 6f 7f 7f
  10. Oregon 3f 6f 6f
  11. b d e
  12. Utah 8wktest 2wktest 3wktest
  13. Ohio 2wktest 2wktest 7wktest
  14. Texas 6wktest 7wktest 7wktest
  15. Oregon 3wktest 6wktest 6wktest

总结:
1、apply在DataFrame的行列上执行
2、applymap在DataFrame的元素上执行
3、map在系列数据(Series)上按照元素执行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/564002
推荐阅读
相关标签
  

闽ICP备14008679号