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随机生成一个6位的验证码代码分享
Mar 24 Python
Python中字典和集合学习小结
Jul 07 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
Python 函数基础知识汇总
Mar 09 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
python 自定义对象的打印方法
Jan 12 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python中sort和sorted排序的实例方法
Aug 26 Python
详解pandas赋值失败问题解决
Nov 29 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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代码
2007/03/03 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
MooTools 1.2介绍
2009/09/14 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
python列表与元组详解实例
2013/11/01 Python
Python时间获取及转换知识汇总
2017/01/11 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
管理部部长岗位职责
2013/12/05 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL