分享

Pandas使用自定义函数

 码农9527 2021-09-29

    如果想要应用自定义的函数,或者把其他库中的函数应用到Pandas对象中,有以下三种方法:

    1)操作整个DataFrame的函数:pipe()

    2)操作行或者列的函数:apply()

    3)操作单一元素的函数:applymap()

    如何从上述函数中选择适合的函数,这取决于函数的操作对象。下面介绍了三种方法的使用。

    操作整个数据表

    通过给pipe()函数传递一个自定义函数和适当数量的参数值,从而操作DataFrme中的所有元素。下面示例,实现了数据表中的元素值依次加3。

    首先自定义一个函数,计算两个元素的加和,如下所示:

def adder(ele1,ele2):
 return ele1+ele212复制代码类型:[python]

    然后使用自定义的函数对DataFrame进行操作:

df = pd.DataFrame(np.random.randn(4,3,columns=['c1','c2','c3'])#传入自定义函数以及要相加的数值3df.pipe(adder,3)123复制代码类型:[python]

    完整的程序,如下所示: 

import pandas as pdimport numpy as np#自定义函数def adder(ele1,ele2):
   return ele1+ele2#操作DataFramedf = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])#相加前print(df)#相加后print(df.pipe(adder,3))1234567891011复制代码类型:[python]

    输出结果:

   c1  c2  c30  1.989075  0.932426 -0.5235681 -1.736317  0.703575 -0.8199402  0.657279 -0.872929  0.0408413  0.441424  1.170723 -0.629618
   c1  c2  c30  4.989075  3.932426  2.4764321  1.263683  3.703575  2.1800602  3.657279  2.127071  3.0408413  3.441424  4.170723  2.3703821234567891011复制代码类型:[python]

    操作行或列

    如果要操作DataFrame的某一行或者某一列,可以使用apply()方法,该方法与描述性统计方法类似,都有可选参数axis,并且默认按列操作。示例如下:

import pandas as pdimport numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)#默认按列操作,计算每一列均值print(df.apply(np.mean))123456复制代码类型:[python]

    输出结果:

col1 0.277214col2 0.716651col3   -0.250487dtype: float641234复制代码类型:[python]

    传递轴参axis=1,表示逐行进行操作,示例如下:

import pandas as pdimport numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df)print (df.apply(np.mean,axis=1))12345复制代码类型:[python]

    输出结果:

 col1   col2   col30  0.210370 -0.662840 -0.2814541 -0.875735  0.531935 -0.2839242  1.036009 -0.958771 -1.0489613 -1.266042 -0.257666  0.4034164  0.496041 -1.071545  1.4328170   -0.2446411   -0.2092422   -0.3239083   -0.3734314 0.285771dtype: float6412345678910111213复制代码类型:[python]

    求每一列中,最大值与最小值之差。示例如下:

import pandas as pdimport numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df.apply(lambda x: x.max() - x.min()))1234复制代码类型:[python]

    输出结果:

col1 3.538252col2 2.904771col3 2.650892dtype: float641234复制代码类型:[python]

    操作单一元素

    DataFrame数据表结构的applymap()和Series系列结构的map()类似,它们都可以接受一个Python函数,并返回相应的值。

    示例如下:

import pandas as pdimport numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])#自定义函数lambda函数print(df['col1'].map(lambda x:x*100))12345复制代码类型:[python]

    输出结果:

0 -18.1717061   1.5828612  22.3981563  32.3956904   -133.143543Name: col1, dtype: float64123456复制代码类型:[python]

    下面示例使用了applymap()函数,如下所示:

import pandas as pdimport 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))123456复制代码类型:[python]

    输出结果:

  col1 col2 col30  -1.055926   7.952690  15.2259321   9.362457 -12.230732   7.6634502   2.910049  -2.782934   2.0739053 -12.008132  -1.444989   5.9881444   2.877850   6.563894   8.192513#求均值:col1 0.041726col2   -0.038841col3 0.782879dtype: float64

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多