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实现的一个火车票转让信息采集器
Jul 09 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
详解Python3中的Sequence type的使用
Aug 01 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
利用Python检测URL状态
Jul 31 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
使用python远程操作linux过程解析
Dec 04 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Django filter动态过滤与排序实现过程解析
Nov 26 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来写记数器(详细介绍)
2006/10/09 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python OS模块常用函数说明
2015/05/23 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python selenium如何设置等待时间
2016/09/15 Python
详解Python中的四种队列
2018/05/21 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
python 实现矩阵填充0的例子
2019/11/29 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
建筑项目策划书
2014/01/13 职场文书
工程技术员岗位职责
2014/03/02 职场文书
歌唱比赛主持词
2014/03/18 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
小学中等生评语
2014/12/29 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL