如果想要应用自定义的函数,或者把其他库中的函数应用到 Pandas 对象中,有以下三种方法:
如何从上述函数中选择适合的函数,这取决于函数的操作对象。下面介绍了三种方法的使用。
通过给 pipe() 函数传递一个自定义函数和适当数量的参数值,从而操作 DataFrme 中的所有元素。下面示例,实现了数据表中的元素值依次加 3。
首先自定义一个函数,计算两个元素的加和,如下所示:
- def adder(ele1,ele2):
- return ele1+ele2
然后使用自定义的函数对 DataFrame 进行操作:
- df = pd.DataFrame(np.random.randn(4,3,columns=['c1','c2','c3'])
- #传入自定义函数以及要相加的数值3
- df.pipe(adder,3)
完整的程序,如下所示:
- import pandas as pd
- import numpy as np
- #自定义函数
- def adder(ele1,ele2):
- return ele1+ele2
- #操作DataFrame
- df = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])
- #相加前
- print(df)
- #相加后
- print(df.pipe(adder,3))
输出结果:
如果要操作 DataFrame 的某一行或者某一列,可以使用 apply() 方法,该方法与描述性统计方法类似,都有可选参数 axis,并且默认按列操作。示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
- df.apply(np.mean)
- #默认按列操作,计算每一列均值
- print(df.apply(np.mean))
输出结果:
传递轴参 axis=1, 表示逐行进行操作,示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
- print(df)
- print (df.apply(np.mean,axis=1))
输出结果:
求每一列中,最大值与最小值之差。示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
- print(df.apply(lambda x: x.max() - x.min()))
输出结果:
DataFrame 数据表结构的 applymap() 和 Series 系列结构的 map() 类似,它们都可以接受一个 Python 函数,并返回相应的值。
示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
- #自定义函数lambda函数
- print(df['col1'].map(lambda x:x*100))
输出结果:
下面示例使用了 applymap() 函数,如下所示:
- import pandas as pd
- import numpy as np
- #自定义函数
- df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
- print(df.applymap(lambda x:x*10))
- print(df.apply(np.mean))
输出结果: