加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

还在抱怨Pandas运行速度慢?这几个方法会颠覆你的看法

发布时间:2019-01-04 07:02:11 所属栏目:教程 来源:知乎
导读:媒介 当各人谈到数据说明时,说起最多的说话就是Python和SQL。Python之以是得当数据说明,是由于它有许多第三方强盛的库来帮忙,pandas就是个中之一。pandas的文档中是这样描写的: 快速,机动,富有示意力的数据布局,旨在使相关或标志数据的行使既简朴又
副问题[/!--empirenews.page--]

媒介

当各人谈到数据说明时,说起最多的说话就是Python和SQL。Python之以是得当数据说明,是由于它有许多第三方强盛的库来帮忙,pandas就是个中之一。pandas的文档中是这样描写的:

  • “快速,机动,富有示意力的数据布局,旨在使”相关“或”标志“数据的行使既简朴又直观。”

我们知道pandas的两个首要数据布局:dataframe和series,我们对数据的一些操纵都是基于这两个数据布局的。但在现实的行使中,我们也许许多时辰会感受运行一些数据布局的操纵会非常的慢。一个操纵慢几秒也许看不出来什么,可是一整个项目中许多个操纵加起来会让整个开拓事变服从变得很低。有的伴侣诉苦pandas的确太慢了,着实对付pandas的一些操纵也是有必然能力的。

还在诉苦Pandas运行速率慢?这几个要了解倾覆你的观点

pandas是基于numpy库的数组布局上构建的,而且它的许多操纵都是(通过numpy可能pandas自身由Cpython实现并编译成C的扩展模块)在C说话中实现的。因此,假如正确行使pandas的话,它的运行速率应该长短常快的。

本篇将要先容几种pandas中常用到的要领,对付这些要领行使存在哪些必要留意的题目,以及怎样对它们举办速率晋升。

  • 将datetime数据与时刻序列一路行使的利益
  • 举办批量计较的最有用途径
  • 通过HDFStore存储数据节减时刻

行使Datetime数据节减时刻

我们来看一个例子。

  1. >>> import pandas as pd 
  2. >>> pd.__version__ 
  3. '0.23.1' 
  4.  
  5. # 导入数据集 
  6. >>> df = pd.read_csv('demand_profile.csv') 
  7. >>> df.head() 
  8.      date_time  energy_kwh 
  9. 0  1/1/13 0:00       0.586 
  10. 1  1/1/13 1:00       0.580 
  11. 2  1/1/13 2:00       0.572 
  12. 3  1/1/13 3:00       0.596 
  13. 4  1/1/13 4:00       0.592 

从运行上面代码获得的功效来看,仿佛没有什么题目。但现实上pandas和numpy都有一个 dtypes 的观念。假如没有非凡声明,那么date_time将会行使一个 object的dtype范例,如下面代码所示:

  1. >>> df.dtypes 
  2. date_time      object 
  3. energy_kwh    float64 
  4. dtype: object 
  5.  
  6. >>> type(df.iat[0, 0]) 
  7. str 

object 范例像一个大的容器,不只仅可以承载 str,也可以包括那些不能很好地融进一个数据范例的任何特性列。而假如我们将日期作为 str 范例就会极大的影响服从。

因此,对付时刻序列的数据而言,我们必要让上面的date_time列名目化为datetime工具数组(pandas称之为时刻戳)。pandas在这里操纵很是简朴,操纵如下:

  1. >>> df['date_time'] = pd.to_datetime(df['date_time']) 
  2. >>> df['date_time'].dtype 
  3. datetime64[ns] 

我们来运行一下这个df看看转化后的结果是什么样的。

  1. >>> df.head() 
  2.                date_time    energy_kwh 
  3. 0    2013-01-01 00:00:00         0.586 
  4. 1    2013-01-01 01:00:00         0.580 
  5. 2    2013-01-01 02:00:00         0.572 
  6. 3    2013-01-01 03:00:00         0.596 
  7. 4    2013-01-01 04:00:00         0.592 

date_time的名目已经自动转化了,但这还没完,在这个基本上,我们照旧可以继承进步运行速率的。怎样提速呢?为了更好的比拟,我们起首通过 timeit 装饰器来测试一下上面代码的转化时刻。

  1. >>> @timeit(repeat=3, number=10) 
  2. ... def convert(df, column_name): 
  3. ...     return pd.to_datetime(df[column_name]) 
  4.  
  5. >>> df['date_time'] = convert(df, 'date_time') 
  6. Best of 3 trials with 10 function calls per trial: 
  7. Function `convert` ran in average of 1.610 seconds. 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读