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 07 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
使用Python实现分别输出每个数组
Dec 06 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
详解python内置模块urllib
Sep 09 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 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
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
Fabric 应用案例
2016/08/28 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
致跳远运动员广播稿
2014/02/11 职场文书
餐饮营销方案
2014/02/23 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
怀念母亲教学反思
2014/04/28 职场文书
行政监察建议书
2014/05/19 职场文书
施工安全承诺书
2014/05/22 职场文书
教师个人读书活动总结
2014/07/08 职场文书
教师教育教学随笔
2015/08/15 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server