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常见的格式化输出小结
Dec 15 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
Python设计模式之原型模式实例详解
Jan 18 Python
Python制作exe文件简单流程
Jan 24 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python预测2020高考分数和录取情况
Jul 08 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 Python
python Tkinter模块使用方法详解
Apr 07 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
vue实现放大镜效果
2020/09/17 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python K近邻算法的kd树实现
2018/09/06 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
如何在pycharm中安装第三方包
2020/10/27 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
妇科医生自荐信
2013/11/05 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL