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实现通过shelve修改对象实例
Sep 26 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
python使用super()出现错误解决办法
Aug 14 Python
python的unittest测试类代码实例
Dec 07 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
在Django中使用MQTT的方法
May 10 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 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中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
php实现两个数组相加的方法
2015/02/17 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
window.open的功能全解析
2006/10/10 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
javascript计时器详解
2015/02/28 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python中的global关键字的使用方法
2019/08/20 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
综合测评自我鉴定
2013/10/08 职场文书
银行实习生的自我评价
2013/12/09 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
欢迎标语大全
2014/06/21 职场文书
2014年文员工作总结
2014/11/18 职场文书
高中生毕业评语
2014/12/30 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL