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中for语句简单遍历数据的方法
May 07 Python
Python MD5加密实例详解
Aug 02 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python格式化输出%s和%d
May 07 Python
python指定写入文件时的编码格式方法
Jun 07 Python
简单了解python单例模式的几种写法
Jul 01 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
python与pycharm有何区别
Jul 01 Python
matplotlib更改窗口图标的方法示例
Feb 03 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
PHP模块化安装教程
2016/06/01 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
JS中的多态实例详解
2017/10/15 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python插入排序算法实例分析
2015/07/03 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python判断设备是否联网的方法
2018/06/29 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
个人批评与自我批评
2014/10/15 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2014司机年终工作总结
2014/12/05 职场文书
西岭雪山导游词
2015/02/06 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书