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网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
python使用nntp读取新闻组内容的方法
May 08 Python
python通过socket查询whois的方法
Jul 18 Python
详解python字节码
Feb 07 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
python数字类型math库原理解析
Mar 02 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python合并多个excel文件的示例
Sep 23 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
Python+Appium实现自动抢微信红包
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
php引用传值实例详解学习
2013/11/06 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
python中pika模块问题的深入探究
2018/10/13 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
《在大海中永生》教学反思
2014/02/24 职场文书
团结演讲稿范文
2014/05/23 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
学校重阳节活动总结
2015/03/24 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
课改心得体会范文
2016/01/25 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers