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学习RabbitMQ消息队列
Nov 30 Python
python二分查找算法的递归实现方法
May 12 Python
Python生成随机数组的方法小结
Apr 15 Python
Python实现随机选择元素功能
Sep 14 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
Python通过文本和图片生成词云图
May 21 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python 对象和json互相转换方法
2018/03/22 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Python实现word2Vec model过程解析
2019/12/16 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
口头翻译求职人自荐信
2013/12/07 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
高中军训的心得体会
2014/09/01 职场文书
领导班子对照检查材料
2014/09/22 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
Python使用pyecharts控件绘制图表
2022/06/05 Python