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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
Django添加sitemap的方法示例
Aug 06 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
python numpy 矩阵堆叠实例
Jan 17 Python
Python参数传递对象的引用原理解析
May 22 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中的strpos使用示例
2014/02/27 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python版大富翁源代码分享
2018/11/19 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python 调试冷知识(小结)
2019/11/11 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
python中spy++的使用超详细教程
2021/01/29 Python
python中使用np.delete()的实例方法
2021/02/01 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
导游的职业规划书范文
2013/12/27 职场文书
服务之星获奖感言
2014/01/21 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书