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 文件和输入输出小结
Oct 09 Python
介绍Python中的fabs()方法的使用
May 14 Python
Python中的集合类型知识讲解
Aug 19 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
Numpy之文件存取的示例代码
Aug 03 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Django的CVB实例详解
Feb 10 Python
Python中remove漏删和索引越界问题的解决
Mar 18 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
使用PHP编写发红包程序
2015/07/22 PHP
php验证码生成代码
2015/11/11 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
深入浅析python继承问题
2016/05/29 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
部队万能检讨书
2014/02/20 职场文书
银行委托书范本
2014/04/04 职场文书
2014年司法局工作总结
2014/12/11 职场文书
创建文明城市倡议书
2015/04/28 职场文书
PHP新手指南
2021/04/01 PHP
警用民用对讲机找不同
2022/02/18 无线电
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers