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从网络读取图片并直接进行处理的方法
May 22 Python
Python内置数据结构与操作符的练习题集锦
Jul 01 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
简单了解python反射机制的一些知识
Jul 13 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
Numpy一维线性插值函数的用法
Apr 22 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 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生成月历代码
2007/06/14 PHP
Web程序工作原理详解
2014/12/25 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
学生会副主席竞聘书
2014/03/31 职场文书
初中班主任评语大全
2014/04/24 职场文书
学生期末评语大全
2014/04/30 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
党员转正意见怎么写
2015/06/03 职场文书
python pygame入门教程
2021/06/01 Python
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers