Pandas的Apply函数具体使用


Posted in Python onJuly 21, 2020

Pandas最好用的函数

Pandas是Python语言中非常好用的一种数据结构包,包含了许多有用的数据操作方法。而且很多算法相关的库函数的输入数据结构都要求是pandas数据,或者有该数据的接口。

仔细看pandas的API说明文档,就会发现有好多有用的函数,比如非常常用的文件的读写函数就包括如下函数:

Format Type Data Description Reader Writer
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_html to_html
text Local clipboard read_clipboard to_clipboard
binary MS Excel read_excel to_excel
binary HDF5 Format read_hdf to_hdf
binary Feather Format read_feather to_feather
binary Parquet Format read_parquet to_parquet
binary Msgpack read_msgpack to_msgpack
binary Stata read_stata to_stata
binary SAS read_sas  
binary Python Pickle Format read_pickle to_pickle
SQL SQL read_sql to_sql
SQL Google Big Query read_gbq to_gbq

读取数据后,对于数据处理来说,有好多有用的相关操作的函数,但是我认为其中最好用的函数是下面这个函数:

apply函数

apply函数是`pandas`里面所有函数中自由度最高的函数。该函数如下:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。

这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

比如读取一个表格:

Pandas的Apply函数具体使用

假如我们想要得到表格中的PublishedTimeReceivedTime属性之间的时间差数据,就可以使用下面的函数来实现:

import pandas as pd
import datetime  #用来计算日期差的包

def dataInterval(data1,data2):
  d1 = datetime.datetime.strptime(data1, '%Y-%m-%d')
  d2 = datetime.datetime.strptime(data2, '%Y-%m-%d')
  delta = d1 - d2
  return delta.days

def getInterval(arrLike): #用来计算日期间隔天数的调用的函数
  PublishedTime = arrLike['PublishedTime']
  ReceivedTime = arrLike['ReceivedTime']
#  print(PublishedTime.strip(),ReceivedTime.strip())
  days = dataInterval(PublishedTime.strip(),ReceivedTime.strip()) #注意去掉两端空白
  return days

if __name__ == '__main__':  
  fileName = "NS_new.xls";
  df = pd.read_excel(fileName) 
  df['TimeInterval'] = df.apply(getInterval , axis = 1)

有时候,我们想给自己实现的函数传递参数,就可以用的apply函数的*args**kwds参数,比如同样的时间差函数,我希望自己传递时间差的标签,这样没次标签更改就不用修改自己实现的函数了,实现代码如下:

import pandas as pd
import datetime  #用来计算日期差的包

def dataInterval(data1,data2):
  d1 = datetime.datetime.strptime(data1, '%Y-%m-%d')
  d2 = datetime.datetime.strptime(data2, '%Y-%m-%d')
  delta = d1 - d2
  return delta.days

def getInterval_new(arrLike,before,after): #用来计算日期间隔天数的调用的函数
  before = arrLike[before]
  after = arrLike[after]
#  print(PublishedTime.strip(),ReceivedTime.strip())
  days = dataInterval(after.strip(),before.strip()) #注意去掉两端空白
  return days


if __name__ == '__main__':  
  fileName = "NS_new.xls";
  df = pd.read_excel(fileName) 
  df['TimeInterval'] = df.apply(getInterval_new , 
   axis = 1, args = ('ReceivedTime','PublishedTime'))  #调用方式一
  #下面的调用方式等价于上面的调用方式
  df['TimeInterval'] = df.apply(getInterval_new , 
   axis = 1, **{'before':'ReceivedTime','after':'PublishedTime'}) #调用方式二
  #下面的调用方式等价于上面的调用方式
  df['TimeInterval'] = df.apply(getInterval_new , 
   axis = 1, before='ReceivedTime',after='PublishedTime') #调用方式三

修改后的getInterval_new函数多了两个参数,这样我们在使用apply函数的时候要自己传递参数,代码中显示的三种传递方式都行。

最后,本篇的全部代码在下面这个网页可以下载:

https://github.com/Dongzhixiao/Python_Exercise/tree/master/pandas_apply

到此这篇关于Pandas的Apply函数具体使用的文章就介绍到这了,更多相关Pandas Apply函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python使用生成器实现可迭代对象
Mar 20 Python
Flask之请求钩子的实现
Dec 23 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
pymysql模块的操作实例
Dec 17 Python
Python实现井字棋小游戏
Mar 09 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
Pandas之缺失数据的实现
Jan 06 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
Python pandas对excel的操作实现示例
Jul 21 #Python
浅谈Python爬虫原理与数据抓取
Jul 21 #Python
用于ETL的Python数据转换工具详解
Jul 21 #Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 #Python
Python json格式化打印实现过程解析
Jul 21 #Python
基于python实现删除指定文件类型
Jul 21 #Python
python打开音乐文件的实例方法
Jul 21 #Python
You might like
php htmlentities()函数的定义和用法
2016/05/13 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
初步探究Python程序的执行原理
2015/04/11 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
门诊挂号室室长岗位职责
2013/11/27 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android