pandas-apply和applymap

上一篇中,使用了这个apply函数和applymap函数,一开始还用错了,这里记录下两个函数的使用场景

pandas.DataFrame.apply

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

Apply a function along an axis of the DataFrame.

是说,在DataFrame的某个轴上,应用一个函数,所以,我们可以使用axis来说明是在index还是column

一开始,我以为这个函数,是在index或者column上的每一个元素,调用传入的函数,但是,不是这样的哦,我们来看个例子

df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])

df
def do_print(x):
    print(type(x))
    print(x)

df.apply(do_print)

我们这里只是把传入的参数做了一个输出,看看传给函数的到底是什么,知道传入的是什么,就知道该怎么使用了

因为我们没有修改axis参数,所以默认就是0了


也就是说,axis=0是对每一个列column,进行调用传入的函数

再看看,我们的数据,我们的数据是有A、B两列,再看看我们的输出,第一次是一个series,输出的都是4,也就是A列;第二次输出的是series,输出的都是9,也就是B列,所以函数每次接收的都是一整列
而我们的函数,并没有返回值,所以,应用之后,返回的结果就是None了

所以呢,apply函数有什么使用场景呢?
比如,我们想要对某一列,或者某一行,进行一些筛选或者处理,比如对每列求和,求最大值这种,都是可以的哦

df.apply(lambda x : x.max())
df.apply(lambda x : x.sum())

当然了,因为传过来的是一个series,我们也可以对series进行操作

def add_one(x):
    return x+1

df.apply(add_one)

pandas.DataFrame.applymap

DataFrame.applymap(self, func) → 'DataFrame'
Apply a function to a Dataframe elementwise.

applymap函数是针对每一个元素的,而不是像apply,是针对整行、整列


我们依然调用上面的输出函数,可以看到,这次传入的就是每一个元素了

所以,applymap的使用场景,就是对每一个元素进行处理

df.applymap(lambda x : x+1)

好了,这两个函数的介绍先到这里。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。