参考资料:
《对比Excel,轻松学习Python数据分析》
《Intermediate Python》
本文主要简单介绍了Python中非常强大的map()函数和pandas中类似的apply()和applymap()函数。
map()
map(function, args)
map()函数对序列args中的每个值进行相同的function操作,最终得到一个结果序列。
大多数情况下,我们需要把列表中的所有元素一个一个地传递给函数,并收集输出,比如说:
x_s = [1, 2, 3]
y_s = [3, 2, 1]
result = list()
for x, y in zip(x_s, y_s):
result.append(x + y)
运行结果:
而map()可以让我们使用一种简单且优雅得多的方式实现。
示例
x_s = [1, 2, 3]
y_s = [3, 2, 1]
# 对序列x_s和y_s中的对应元素进行相加
a = map(lambda x, y:x+y, x_s, y_s)
map()函数生成的结果序列不会把全部结果显示出来,要想获得结果序列,可以使用list()方法。
大多数情况下,我们使用匿名函数(lambda)来配合map()。
map()不仅可用于一列表的输入,甚至可以用于一列表的函数。
def multiply(x, y):
return (x * y)
def add(x, y):
return (x + y)
funcs = [multiply, add] # 包含两个函数的列表
for x, y in zip(x_s, y_s):
value = map(lambda f: f(x, y), funcs)
print(list(value))
运行结果:
apply()和applymap()
在DataFrame中与map()函数类似的函数有两个:
apply()
applymap()
apply()
apply()函数主要用于对DataFrame中的某一column或row中的元素执行相同的函数操作。
新建一个DataFrame如下:
对某一列(column)进行操作
# 对C1列中的每一个元素加1
df["C1"].apply(lambda x:x+1)
运行结果:
对某一行(row)进行操作
# 对第1行的每一个元素加1
df.loc[1].apply(lambda x:x+1)
运行结果:
当然,apply()也可对DataFrame的每一个元素进行操作
# 对df表中的每一个元素加1
df.apply(lambda x:x+1)
运行结果:
applymap()
applymap()函数用于对DataFrame中的每一个元素执行相同的函数操作。
# 对df表中的每一个元素加1
df.applymap(lambda x:x+1)
运行结果: