上一篇中,使用了这个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)
好了,这两个函数的介绍先到这里。