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装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
Python爬取成语接龙类网站
Oct 19 Python
对python 命令的-u参数详解
Dec 03 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
TensorFlow固化模型的实现操作
May 26 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
基于python代码批量处理图片resize
Jun 04 Python
pytorch实现手写数字图片识别
May 20 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获取当前文件的父目录方法汇总
2016/07/21 PHP
php微信公众号开发之简答题
2018/10/20 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
详解javascript void(0)
2020/07/13 Javascript
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python监控文件并且发送告警邮件
2018/06/21 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
个人简历中的自我评价怎么写
2014/01/26 职场文书
如何写自我鉴定
2014/03/19 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
2015年调度员工作总结
2015/04/30 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
员工试用期工作总结
2019/06/20 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Apache POI的基本使用详解
2021/11/07 Servers