5个pandas调用函数的方法让数据处理更加灵活自如


Posted in Python onApril 24, 2022

0. 数据预览

这里的数据是虚构的语数外成绩,大家在演示的时候拷贝一下就好啦。

import pandas as pd
df = pd.read_clipboard()
df

姓名

语文

数学

英语

性别

总分

0

才哥

91

95

92

1

1

小明

82

93

91

1

2

小华

82

87

94

1

3

小草

96

55

88

0

4

小红

51

41

70

0

5

小花

58

59

40

0

6

小龙

70

55

59

1

7

杰克

53

44

42

1

8

韩梅梅

45

51

67

0

1. apply

apply可以对DataFrame类型数据按照列或行进行函数处理,默认情况下是按照(单独对Series亦可)。

在案例数据中,比如我们想将性别列中的1替换为男,0替换为女,那么可以这样搞定。

先自定义一个函数,这个函数有一个参数 s(Series类型数据)。

def getSex(s):
    if s==1:
        return '男'
    elif s==0:
        return '女'

上述函数还有更简洁写法,这里方便理解采用最直观的写法哈。

然后,我们直接使用apply去调用这个函数即可。

df['性别'].apply(getSex)

可以看到输出结果如下:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性别, dtype: object

当然,我们也可以直接用调用匿名函数lambda的形式:

df['性别'].apply( lambda s: '男' if s==1 else '女' )

可以看到结果是一样的:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性别, dtype: object

以上是单纯根据一列的值条件进行的数据处理,我们也可以根据多列组合条件(可以了解为按行)进行处理,需要注意这种情况下需要指定参数axis=1,具体看下面案例。

案例中,我们认为总分高于200数学分数高于90为高分

# 多列条件组合
df['level'] = df.apply(lambda df: '高分' if df['总分']>=200 and df['数学']>=90 else '其他', axis=1)
df

5个pandas调用函数的方法让数据处理更加灵活自如

同样,上述用apply调用的函数都是自定义的,实际上我们也可以调用内置或者pandas/numpy自带的函数。

比如,求语数外和总分最高分:

# python内置的函数
df[['语文','数学','英语','总分']].apply(max)

语文 96
数学 95
英语 94
总分 278
dtype: int64

求语数外和总分平均分:

# numpy自带的函数
import numpy as np
df[['语文','数学','英语','总分']].apply(np.mean)

语文 69.777778
数学 64.444444
英语 71.444444
总分 205.666667
dtype: float64

2. applymap

applymap则是对每个元素的函数处理,变量是每个元素值。

比如对语数外三科超过90分认为是科目高分

df[['语文','数学','英语']].applymap(lambda x:'高分' if x>=90 else '其他')

语文

数学

英语

0

高分

高分

1

其他

高分

2

其他

其他

3

高分

其他

4

其他

其他

5

其他

其他

6

其他

其他

7

其他

其他

8

其他

其他

3. map

map则是根据输入对应关系映射值返回最终数据,作用于某一列。传入的值可以是字典,键值为原始值,值为需要替换的值。也可以传入一个函数或者字符格式化表达式等等。

以上面性别列中的1替换为男,0替换为女为例,还可以通过map来实现
 

df['性别'].map({1:'男', 0:'女'})

输出结果也是一致的:

0 男
1 男
2 男
3 女
4 女
5 女
6 男
7 男
8 女
Name: 性别, dtype: object

比如总分列想变成格式化字符:

df['总分'].map('总分:{}分'.format)

0 总分:278分
1 总分:266分
2 总分:263分
3 总分:239分
4 总分:162分
5 总分:157分
6 总分:184分
7 总分:139分
8 总分:163分
Name: 总分, dtype: object

4. agg

agg一般用于聚合,在分组或透视操作中常见到,用法是和apply比较接近。

比如,求语数外和总分的最高分、最低分和平均分

df[['语文','数学','英语','总分']].agg(['max','min','mean'])

5个pandas调用函数的方法让数据处理更加灵活自如

我们还可以对不同的列进行不同的运算(用字典形式指定)

# 语文最高分、数学最低分和英文最高最低分
df.agg({'语文':['max'],'数学':'min','英语':['max','min']})

5个pandas调用函数的方法让数据处理更加灵活自如

当然也支持自定义函数的调用

5. pipe

以上四个调用函数的方法,我们发现被调用的函数的参数就是 ​​DataFrame​​​或Serise数据,如果我们被调用的函数还需要别的参数,那么该如何做呢?

所以,pipe就出现了。

pipe又称管道方法,可以将我们的处理分析过程标准化、流程化。它在调用函数的时候可以带被调用函数的其他参数,这样就方便自定义函数的功能扩展了。

比如,我们需要获取总分大于n,性别为sex的同学的数据,其中n和sex是可变参数,那么用apply等就不太好处理。这个时候,就可以用到​​pipe​​方法来搞事了!

我们先定义一个函数:

# 定义一个函数,总分大于等于n,性别为sex的同学数据(sex为2表示不分性别)
def total(df, n, sex):
dfT = df.copy()
if sex == 2:
return dfT[(dfT['总分']>=n)]
else:
return dfT[(dfT['总分']>=n) & (dfT['性别']==sex)]

如果我们要找到总分大于200,不分性别的学生成绩,可以这样:

df.pipe(total,200,2)

5个pandas调用函数的方法让数据处理更加灵活自如

再找总分大于150,性别为男生(1)的学生成绩,可以这样:

df.pipe(total,150,1)

5个pandas调用函数的方法让数据处理更加灵活自如

再找总分大于200,性别为女生(0)的学生成绩,可以这样:
 

df.pipe(total,200,0)

5个pandas调用函数的方法让数据处理更加灵活自如

以上就是本次我们介绍的5种调用函数的方法,这些操作技巧可以让我们在处理数据时更加灵活自如

到此这篇关于分享5个数据处理更加灵活的pandas调用函数方法的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
研究Python的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
详谈python中冒号与逗号的区别
Apr 18 Python
Python解决走迷宫问题算法示例
Jul 27 Python
Python 复平面绘图实例
Nov 21 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
5款实用的python 工具推荐
Oct 13 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 #Python
在 Python 中利用 Pool 进行多线程
Apr 24 #Python
Python何绘制带有背景色块的折线图
python中Pyqt5使用Qlabel标签播放视频
Apr 22 #Python
Python使用MapReduce进行简单的销售统计
python使用pycharm安装pyqt5以及相关配置
Python使用DFA算法过滤内容敏感词
You might like
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
React组件的三种写法总结
2017/01/12 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
Python 探针的实现原理
2016/04/23 Python
Python实现的计数排序算法示例
2017/11/29 Python
python 字典中取值的两种方法小结
2018/08/02 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
python numpy数组中的复制知识解析
2020/02/03 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
投资意向书
2014/07/30 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
ES6 解构赋值的原理及运用
2021/05/25 Javascript
JavaScript实现简单计时器
2021/06/22 Javascript