Pythonのlambdaとapply、mapの使い方
4637 ワード
1 lambda
Lambdaプロトタイプ:lambdaパラメータlambdaパラメータ:操作(パラメータ)
Lambda関数は匿名関数とも呼ばれ、特定の名前のない関数であり、関数が必要な場所で使用できる単行関数を迅速に定義できます.これはdefで定義された関数とは異なります.
Lambdaとdefの違い:
1)defの作成方法には名前がありますが、lambdaにはありません.
2)lambdaは関数オブジェクトを返しますが、このオブジェクトは識別子を与えません.defは関数オブジェクトを変数(関数名)に割り当てます.
3)lambdaは式にすぎず,defは文である.
4)lambda式:「後には1つの式しかありませんが、defは複数あります.
5)ifやforやprintのような文はlambdaでは使用できません.defは使用できます.
6)lambdaは一般的に簡単な関数を定義するために用いられ、defは複雑な関数を定義することができる.
1.1最も簡単な例を挙げる
Lambdaプロトタイプ:lambdaパラメータlambdaパラメータ:操作(パラメータ)
Lambda関数は匿名関数とも呼ばれ、特定の名前のない関数であり、関数が必要な場所で使用できる単行関数を迅速に定義できます.これはdefで定義された関数とは異なります.
Lambdaとdefの違い:
1)defの作成方法には名前がありますが、lambdaにはありません.
2)lambdaは関数オブジェクトを返しますが、このオブジェクトは識別子を与えません.defは関数オブジェクトを変数(関数名)に割り当てます.
3)lambdaは式にすぎず,defは文である.
4)lambda式:「後には1つの式しかありませんが、defは複数あります.
5)ifやforやprintのような文はlambdaでは使用できません.defは使用できます.
6)lambdaは一般的に簡単な関数を定義するために用いられ、defは複雑な関数を定義することができる.
1.1最も簡単な例を挙げる
# :
g = lambda x: x ** 2
print(g(3))
"""
9
"""
# :
g = lambda x, y, z: (x + y) ** z
print(g(1, 2, 2))
"""
9
"""
1.2
list :
map(lambda x: x * x, [y for y in range(10)])
def sq(x):
return x * x
map(sq, [y for y in range(10)])
( ) , 。
, , 。 ?
a = [1, 2, 3]
f = lambda x : x + 1
, , 。 [1, 2, 3] , lambda x : x + 1 , 「 」 。
2 map
map() , 。 a f,
map(f, a)
f a , [2, 3, 4]。 lambda f, :
map(lambda x: x + 1, [1, 2, 3])
?
a = [1, 2, 3]
r = []
for each in a:
r.append(each + 1)
3 Apply
Python apply :
apply(func,*args,**kwargs)
,func 。
: , ,
:args , , A A(a=1,b=2), (a=3,b=4), (b=4,a=3) 。kwargs , args ,kwargs , args 。
apply func 。
3.1
from past.builtins import apply
def function(a, b):
print(a, b)
apply(function, 'good', 'better')
apply(function, 2, 3 + 6)
apply(function, ('good',), {'b': 'better'})
:
good better
2 9
('good',) {'b': 'better'}
3.2 DataFrame apply
#
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
"""
b d e
utah -0.667969 1.974801 0.738890
ohio -0.896774 -0.790914 0.474183
texas 0.043476 0.890176 -0.662676
oregon 0.701109 -2.238288 -0.154442
"""
# 。DataFrame apply
f=lambda x:x.max()-x.min()
# ,
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
"""
b 1.597883
d 4.213089
e 1.401566
dtype: float64
utah 2.642770
ohio 1.370957
texas 1.552852
oregon 2.939397
dtype: float64
"""
# , apply Series
def f(x):
return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
# , ,
print(t3)
"""
b d e
min -0.896774 -2.238288 -0.662676
max 0.701109 1.974801 0.738890
"""
# python ,
# DataFrame
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
"""
b d e
utah -0.67 1.97 0.74
ohio -0.90 -0.79 0.47
texas 0.04 0.89 -0.66
oregon 0.70 -2.24 -0.15
"""
# , map, Series map 。 dataframe applymap。
t4=df['e'].map(f)
print(t4)
"""
utah 0.74
ohio 0.47
texas -0.66
oregon -0.15
"""