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获得时间的实例说明
Mar 25 Python
python简单实现计算过期时间的方法
Jun 09 Python
MySQL适配器PyMySQL详解
Sep 20 Python
好的Python培训机构应该具备哪些条件
May 23 Python
详解Python locals()的陷阱
Mar 26 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Python中异常处理用法
Nov 27 Python
python图像处理 PIL Image操作实例
Apr 09 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/11/27 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
Python中的元类编程入门指引
2015/04/15 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python运算符重载详解及实例代码
2017/03/07 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
水果连锁超市创业计划书
2014/01/24 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书