Python中的apply和lambda函数应用

Python中的apply和lambda函数应用

在pandas中,apply和lambda两个函数的使用方法简介和测试用例。

1、apply

Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理。Pandas 的很多对象都可以使用 apply() 来调用函数,如 Dataframe、Series、分组对象、各种时间序列等。

apply() 使用时,通常放入一个 lambda 函数表达式、或一个函数作为操作运算,官方上给出DataFrame的 apply() 用法:

DataFrame.apply(self, func, axis=0, raw=False, result_type=None,
args=(), **kwargs)

(1)测试用例:

测试一下效率:
方法一:用lambda 计算三列的和
方法二:直接用dataframe计算三列的和
用10000行记录测试。

import random
import string
import pandas as pd
from datetime import datetime

def my_test(b,c,d):
    return b+c+d


lst_a = []
for i in range(10000):
    str = random.sample(string.ascii_letters, 16)
    lst_a.append(''.join(str))     

df = pd.DataFrame({'a': lst_a,
                   'b': np.random.randn(10000),
                   'c': np.random.randn(10000),
                   'd': np.random.randn(10000)})
df.set_index('a',inplace = True)

print(df)

# 方法1
time1 = datetime.now()
#使用lambda计算                            
df1 = pd.DataFrame({'mytest':df.apply(lambda row: my_test(row['b'], row['c'], row['d']), axis=1)})

total_seconds = (datetime.now() - time1).total_seconds()
print('spend time:',total_seconds)
#print(df1)
 
# 方法2  
time1 = datetime.now()
df2 = pd.DataFrame({'myvalue': df['b'] + df['c'] + df['d']})

total_seconds = (datetime.now() - time1).total_seconds()
print('spend time:',total_seconds) 
#print(df2)

(2)测试结果:

                         b         c         d
a                                             
cglSuErAjCRzTJfU  0.833020  1.265337  0.089077
TzEpfyJRmglxvSkP  1.117320 -1.285941 -1.057394
iHCuYWqjabFPQMnZ -0.732941 -0.406586  0.506080
VhdLYmIwAHzjQPkx  0.053923  0.036442  0.099741
MjbKEeupkXQciYTx -0.675878  1.197151  0.001515
...                    ...       ...       ...
ZVwSaeFIpJUuKbvW -0.436833 -1.413206  0.173300
UDXzALqQtEYvdmJp -0.053518  0.222667 -1.150793
YrdmPJeuLESDAHFa -1.025011 -0.448613  0.549938
pkEtnAyZgPwLihKG -1.023037  0.388634  0.157503
rwVlsUnavIQPkjBx -0.014395  0.581768 -0.906610

[10000 rows x 3 columns]
spend time: 0.097323
spend time: 0.000675

方法二的效率是方法一的144倍,还是在dataframe中计算效率高。

2、lambda

匿名函数lambda:匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的、在同一行中定义函数的方法。

lambda函数一般功能简单:单行 表达式决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的运算结果就是函数的返回值

(1)测试用例:

import random
import string
import pandas as pd

#平方,一个参数
square = lambda x: x**2

#乘积,三个参数
product = lambda x,y,z: x*y*z

#参数是list ,返回有序的list
sort_length = lambda lst: sorted(lst_a)

#参数是字符串,返回大写字符串
uppercase = lambda s: s.upper()

# 参数是数字,返回是布尔值
is_even = lambda x: x % 2 == 0


lst_a = np.random.rand(8)

str = random.sample(string.ascii_letters, 16)
str_b=''.join(str)      

print(lst_a)
print(sort_length(lst_a))

print(square(8))
print(uppercase(str_b))

print(is_even(3))

(2)测试结果:

[0.1401774  0.07369117 0.07266297 0.59028196 0.46876008 0.22168191
 0.25371426 0.91494125]
[0.0726629739219603, 0.07369116771417583, 0.14017740491981678, 0.22168190639605723, 0.2537142626280722, 0.46876007719865276, 0.5902819579210462, 0.914941251521296]
64
SAMWFPUHYJNQNULP
False

猜你喜欢

转载自blog.csdn.net/qq_39065491/article/details/130831249