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的Django框架中inclusion_tag的使用
Jul 21 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
python如何读写json数据
Mar 21 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
简单了解django缓存方式及配置
Jul 19 Python
Python单元测试与测试用例简析
Nov 09 Python
python二元表达式用法
Dec 04 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
iPython pylab模式启动方式
Apr 24 Python
python使用建议与技巧分享(一)
Aug 17 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 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/06/10 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
js实现3D旋转效果
2020/08/18 Javascript
Python入门篇之对象类型
2014/10/17 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python常用的日期时间处理方法示例
2015/02/08 Python
python Django框架实现自定义表单提交
2016/03/25 Python
python 编码规范整理
2018/05/05 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
Django之模板层的实现代码
2019/09/09 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
python如何爬取网页中的文字
2020/07/28 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
专业技术职务聘任书
2014/03/29 职场文书
节约用电标语
2014/06/17 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
英文邀请函
2015/02/02 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server