Pandas使用自定义函数
- 1) 操作整个 DataFrame 的函数:pipe()
- 2) 操作行或者列的函数:apply()
- 3) 操作单一元素的函数:applymap()
如何从上述函数中选择适的函数,这取决于函数的操作对象。下面介绍了三种方法的使用。
操作整个数据表
通过给 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))
输出结果:
c1 c2 c3
0 1.989075 0.932426 -0.523568
1 -1.736317 0.703575 -0.819940
2 0.657279 -0.872929 0.040841
3 0.441424 1.170723 -0.629618
c1 c2 c3
0 4.989075 3.932426 2.476432
1 1.263683 3.703575 2.180060
2 3.657279 2.127071 3.040841
3 3.441424 4.170723 2.370382
操作行或列
如果要操作 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))
输出结果:
col1 0.277214
col2 0.716651
col3 -0.250487
dtype: float64
传递轴参 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))
输出结果:
col1 col2 col3
0 0.210370 -0.662840 -0.281454
1 -0.875735 0.531935 -0.283924
2 1.036009 -0.958771 -1.048961
3 -1.266042 -0.257666 0.403416
4 0.496041 -1.071545 1.432817
0 -0.244641
1 -0.209242
2 -0.323908
3 -0.373431
4 0.285771
dtype: float64
求每一列中,值与最小值之差。示例如下:
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()))
输出结果:
col1 3.538252
col2 2.904771
col3 2.650892
dtype: float64
操作单一元素
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))
输出结果:
0 -18.171706
1 1.582861
2 22.398156
3 32.395690
4 -133.143543
Name: col1, dtype: float64
下面示例使用了 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))
输出结果:
col1 col2 col3
0 -1.055926 7.952690 15.225932
1 9.362457 -12.230732 7.663450
2 2.910049 -2.782934 2.073905
3 -12.008132 -1.444989 5.988144
4 2.877850 6.563894 8.192513
#求均值:
col1 0.041726
col2 -0.038841
col3 0.782879
dtype: float64
- 随机文章
- 直播 中国 马尔代夫战争(中国军队出动 马尔代夫战争实时报道)
- 东方马尔代夫平潭(东方集团将投资马尔代夫平潭旅游项目)
- 国足 马尔代夫 盘口(国足VS马尔代夫,赛前盘口分析)
- 悉尼-马尔代夫(澳洲疫情好转,悉尼至马尔代夫航线重新开通)
- 关于马尔代夫的话(邂逅碧海蓝天,探秘马尔代夫奢华之旅)
- 咸阳马尔代夫日出(观赏咸阳马尔代夫美不胜收的日出风光)
- 南昌瑶湖马尔代夫(南昌市民的马尔代夫度假胜地:瑶湖岛)
- 小岛 马尔代夫(马尔代夫小岛:热带天堂)
- 大连马尔代夫旅游(探索大连市内仿佛马尔代夫的旅游胜地)
- 使命召唤马尔代夫(马尔代夫推出全新版本的使命召唤游戏)
- 带孩子去马尔代夫(带儿童游马尔代夫:家庭友好度假建议)
- 宜昌马尔代夫在哪(宜昌哪里有类似马尔代夫的度假胜地?)
- 假装去了马尔代夫(走进马尔代夫丨天堂般的海岛度假体验)
- 安吉 马尔代夫(安吉岛:马尔代夫的度假胜地)
- 屯留马尔代夫溺水(马尔代夫游客溺水身亡,提醒安全警示)
- 沙滩公园马尔代夫(马尔代夫沙滩公园:全新体验等你来!)
- 涿州马尔代夫大全(涿州旅游:盘点马尔代夫必游景点大全)
- 芜湖马尔代夫宝石(芜湖游客发现马尔代夫宝石,价值惊人)
- 涿州马尔代夫露营(涿州旅游新玩法:马尔代夫风情露营!)
- 沙滩蓝色马尔代夫(马尔代夫度假胜地蜜月沙滩的蓝色奇观)
- 蕲州马尔代夫天气(蕲州地区天气预报:马尔代夫降雨增多)
- 香港留学马尔代夫(香港学生赴马尔代夫留学需注意什么?)
- 马尔代夫个人婚礼(马尔代夫私人婚典,定制尊贵如梦之日)
- 马尔代夫下网了吗(马尔代夫因断电,暂停部分网络服务。)
- 木兰 马尔代夫(绝美马尔代夫,一心追梦的木兰)
- 慈利的马尔代夫图(慈利湖畔看马尔代夫,湖光美不胜收!)
- 杰西 马尔代夫(杰西在马尔代夫度假:一段令人难忘的旅程)
- 马尔代夫丛林大海(探索马尔代夫的自然奇观:丛林和大海)
- 长沙附近马尔代夫(长沙周边启动打造中国版马尔代夫规划)
- 马尔代夫东莞疫情(东莞一工厂导致马尔代夫新冠疫情爆发)
