赞
踩
map函数对可遍历对象中的每个值进行相同的func操作,最终得到一个结果序列(map 对象)
但是生成的结果序列不会把全部结果显示出来,要想显示出全部结果,可以用list方法展现,或者用解包、遍历等方法展现。
当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。
- list1 = list(range(10))
- list1
- 输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
- def f(x):
- return 2**x
-
- print(*map(f,list1))
- type(map(f,list1))
-
- 输出结果:1 2 4 8 16 32 64 128 256 512
- 输出结果:map
map()返回的是一个map对象,可以将其转化为其他可遍历对象进行其他操作,也可通过遍历操作将将其中各个元素拿出来(也可以加*进行解包)
- list2 = ['apple','banana','orange']
- list2
- 输出结果:['apple', 'banana', 'orange']
-
- def f2(x):
- return x.capitalize()
-
- print(*map(f2,list2))
- 输出结果:Apple Banana Orange
-
- type(map(f2,list2))
- 输出结果:map
map 传入的第一个参数是个函数,所以也可以传入匿名函数
- test2 = map(lambda x,y:x**y,[1,2,3],[1,2,3])
-
- for i in test2:
- print(i)
- 输出结果:
- 1
- 4
- 27
传入的可遍历对象长度不一,会以最短的函数为准
- test3 = map(lambda x,y:(x**y),[1,2,3],[1,2])
- for i in test3:
- print(i)
- 输出结果:
- 1
- 4
懒执行模式,只有使用时才会报错
- test4 = map(lambda x:x**2,[1,2,3],[1,2])
- #懒执行模式,只有在使用时候才会报错,这一步正常执行
-
- for i in test4:
- print(i)
- 执行结果:---------------------------------------------------------------------------
- TypeError Traceback (most recent call last)
- <ipython-input-90-763bf75a253b> in <module>
- ----> 1 for i in test4:
- 2 print(i)
-
- TypeError: <lambda>() takes 1 positional argument but 2 were given
可以用来类型转换
- test5 = map(str,[123,23,456]) # 可以用来进行类型转换
- [*test5]
- 输出结果:['123', '23', '456']
Apply a function along an axis of the DataFrame.
这个函数是dataframe的函数,apply方法实现一列或一行的操作,默认是对列操作
- frame = pd.DataFrame(np.random.randint(1,9,(4,3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])
- frame
- 输出结果:
- b d e
- Utah 8 2 3
- Ohio 2 2 7
- Texas 6 7 7
- Oregon 3 6 6
-
- f = lambda x : x.max()-x.min() #匿名函数求极差
- frame.apply(f) #apply方法实现一列或一行的操作,默认是对列操作
- 输出结果:
- b 6
- d 5
- e 4
- dtype: int64
-
-
- frame.apply(f,axis=1) #设置axis = 1 或者axis=‘columns’会对每一行调用一次函数f
- frame.apply(f,axis='columns')
- 输出结果:
- Utah 6
- Ohio 5
- Texas 1
- Oregon 3
- dtype: int64
-
- Utah 6
- Ohio 5
- Texas 1
- Oregon 3
- dtype: int64
- format1 = lambda x: '%.xf' %x
- format2 = lambda x: str(x)+'wktest'
-
- frame.applymap(format1)#applymap实现对df进行逐元素执行运算
- frame.applymap(format2)
- 输出结果:
- b d e
- Utah 8f 2f 3f
- Ohio 2f 2f 7f
- Texas 6f 7f 7f
- Oregon 3f 6f 6f
-
- b d e
- Utah 8wktest 2wktest 3wktest
- Ohio 2wktest 2wktest 7wktest
- Texas 6wktest 7wktest 7wktest
- Oregon 3wktest 6wktest 6wktest
总结:
1、apply在DataFrame的行列上执行
2、applymap在DataFrame的元素上执行
3、map在系列数据(Series)上按照元素执行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。