panda中的apply()方法介绍

1.apply()说明

作用范围:pandas中的SeriesDataFrame
作用:通过使用apply()方法,我们可以调用自己定义的函数,使得代码结构更加清晰,简洁。


2.apply()的应用过程

如果一个SeriesDataFrame调用apply()方法,然后使用自己定义的函数,其中自定义的函数的第一个参数,代表的是SeriesDataFrame的下一个“纬度”
比如说如果是DataFrame,则参数是他的每一个列。如果是Series,则是他的每一个值。

(1)DataFrame,参数是他的每一个列
eg:计算一个DataFrame各个字段的偏度和峰度

import pandas as pd
import numpy as np

df = pd.DataFrame({
'key1':[1, 2, 3, 4, 5],
'key2':[4, 5, 6, 2, 1]
})

def skew_kurt(x):
print(x, type(x))
skews = x.skew()
kurts = x.kurt()
return pd.Series([skews, kurts], index=['skew', 'kurt']) # Series的参数为Series,则会变为DataFrame,且参数变为列
print(df.apply(skew_kurt))

结果:

0 1
1 2
2 3
3 4
4 5
Name: key1, dtype: int64 <class 'pandas.core.series.Series'>
0 1
1 2
2 3
3 4
4 5
Name: key1, dtype: int64 <class 'pandas.core.series.Series'>
0 4
1 5
2 6
3 2
4 1
Name: key2, dtype: int64 <class 'pandas.core.series.Series'>
key1 key2
skew 0.0 -0.235514
kurt -1.2 -1.963223

通过输出结果中的可以看到,该函数会执行多次,且每次执行都会将DataFrame中的某一列传过去。
(2)Series,参数是他的每一个值
eg:将一个Series的每一个值用该值的第一个字符替换

import pandas as pd
import numpy as np

s = pd.Series(['wang', 'li', 'zhao'])

def text(x):
print(x, type(x))
return x[0] # Series的参数为Series,则会变为DataFrame,且参数变为列
print(s.apply(text))

结果:

wang <class 'str'>
li <class 'str'>
zhao <class 'str'>
0 w
1 l
2 z
dtype: object


3.apply()应用

(1)通过上面的例子,我们可以看见其可以应用于SeriesDataFrame
(2)apply()方法还可以应用于分组---groupby()参数也是代表下一个纬度
eg:

import pandas as pd
import numpy as np

df = pd.DataFrame({'data1':np.random.rand(5),
'data2':np.random.rand(5),
'key1':list('aabba'),
'key2':['one','two','one','two','one']})

print(df.groupby('key1').apply(lambda x: x.describe()))

结果:

a count 3.000000 3.000000
mean 0.693046 0.608697
std 0.257070 0.522231
min 0.396401 0.011814
25% 0.614231 0.422315
50% 0.832060 0.832817
75% 0.841368 0.907138
max 0.850676 0.981459
b count 2.000000 2.000000
mean 0.352287 0.482039
std 0.343271 0.675147
min 0.109558 0.004638
25% 0.230922 0.243339
50% 0.352287 0.482039
75% 0.473651 0.720740
max 0.595016 0.959441


4.小结

  • 通过使用apply()方法,我们可以调用自己定义的函数,使得代码结构更加清晰,简洁。
  • 自定义的函数的第一个参数,代表的是下一个“纬度”
posted @ 2019-09-22 17:07  墨莲居士  阅读(4191)  评论(0)    收藏  举报