本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好。

测试环境如下:

windows 7, 64位

python 3.5

pandas 0.19.2

numpy 1.11.3

jupyter notebook

需要说明的是,不同的系统,不同的电脑配置,不同的软件环境,运行结果可能有些差异。就算是同一台电脑,每次运行时,运行结果也不完全一样。

1 测试内容

测试的内容为,分别用三种方法来计算一个简单的运算过程,即 a*a+b*b 。

三种方法分别是:

python的for循环

Pandas的Series

Numpy的ndarray

首先构造一个DataFrame,数据量的大小,即DataFrame的行数,分别为10, 100, 1000, … ,直到10,000,000(一千万)。

然后在jupyter notebook中,用下面的代码分别去测试,来查看不同方法下的运行时间,做一个对比。

import pandas as pd

import numpy as np

# 100分别用 10,100,...,10,000,000来替换运行

list_a = list(range(100))

# 200分别用 20,200,...,20,000,000来替换运行

list_b = list(range(100,200))

print(len(list_a))

print(len(list_b))

df = pd.DataFrame({'a':list_a, 'b':list_b})

print('数据维度为:{}'.format(df.shape))

print(len(df))

print(df.head())

100

100

数据维度为:(100, 2)

100

a b

0 0 100

1 1 101

2 2 102

3 3 103

4 4 104

执行运算, a*a + b*b

Method 1: for循环

%%timeit

# 当DataFrame的行数大于等于1000000时,请用 %%time 命令

for i in range(len(df)):

df['a'][i]*df['a'][i]+df['b'][i]*df['b'][i]

100 loops, best of 3: 12.8 ms per loop

Method 2: Series

type(df['a'])

pandas.core.series.Series

%%timeit

df['a']*df['a']+df['b']*df['b']

The slowest run took 5.41 times longer than the fastest. This could mean that an intermediate result is being cached.

1000 loops, best of 3: 669 µs per loop

Method 3: ndarray

type(df['a'].values)

numpy.ndarray

%%timeit

df['a'].values*df['a'].values+df['b'].values*df['b'].values

10000 loops, best of 3: 34.2 µs per loop

2 测试结果

运行结果如下:

从运行结果可以看出,for循环明显比Series和ndarray要慢很多,并且数据量越大,差异越明显。当数据量达到一千万行时,for循环的表现也差一万倍以上。 而Series和ndarray之间的差异则没有那么大。

PS: 1000万行时,for循环运行耗时特别长,各位如果要测试,需要注意下,请用 %%time 命令(只测试一次)。

下面通过图表来对比下Series和ndarray之间的表现。

从上图可以看出,当数据小于10万行时,ndarray的表现要比Series好些。而当数据行数大于100万行时,Series的表现要稍微好于ndarray。当然,两者的差异不是特别明显。

所以一般情况下,个人建议,for循环,能不用则不用,而当数量不是特别大时,建议使用ndarray(即df[‘col’].values)来进行计算,运行效率相对来说要好些。

python效率计算公式_Python: Pandas运算的效率探讨以及如何选择高效的运算方式相关推荐

  1. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  2. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...

    先上个图看下网页版数据.mysql结构化数据 通过Python读写mysql执行时间为:1477s,而通过Pandas读写mysql执行时间为:47s,方法2速度几乎是方法1的30倍.在于IO读写上, ...

  3. python效率提升_Python GUI开发,效率提升10倍的方法!

    1 框架简介 这个框架的名字叫 PySimpleGUI,它完全基于Python语言,能非常方便地开发GUI界面,代码量相比现有框架减少50%到90%.并且,它提供了极为友好的Python风格的接口,大 ...

  4. python多线程图像识别_Python 多线程抓取图片效率对比

    目的: 是学习python 多线程的工作原理,及通过抓取400张图片这种IO密集型应用来查看多线程效率对比 import requests import urlparse import os impo ...

  5. python数字计算公式_python数的运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 什么是运算符? 本章节主要说明python的运算符. 举个简单的例子4 +5 = ...

  6. python数字计算公式_Python编程5:Python中的数字和数学运算

    #少儿编程# 小朋友们应该都玩过计算器,用计算器做算术,不论数字多大,它都能迅速的给出答案.而计算机不仅计算的更快,还能做更复杂的计算.计算机非常善于计算,它每秒能执行10亿次的计算. Python中 ...

  7. python多线程效率低_Python 多进程、多线程效率比较

    Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...

  8. 有没有好的python教程推荐_Python Pandas教程推荐,全网最佳,没有之一

    https://zhuanlan.zhihu.com/p/29576732​zhuanlan.zhihu.com 简介 下面内容为github作者的Pandas学习笔记,目前是我看到最好的资料,没有之 ...

  9. python center函数_python pandas移动窗口函数rolling的用法

    超级好用的移动窗口函数 最近经常使用移动窗口函数,觉得很方便,功能强大,代码简单,故将pandas中的移动窗口函数都做介绍.它都是以rolling打头的函数,后接具体的函数,来显示该移动窗口函数的功能 ...

最新文章

  1. 如何实现js调用java函数
  2. Glide核心设计一:皮皮虾,我们走
  3. Python教程:跳出多层循环for、while
  4. 875. 爱吃香蕉的珂珂(二分)
  5. oracle中的判断大小,sql语句判断大小
  6. 安卓系统挂载NTFS格式硬盘_苹果电脑挥之不去的烦恼!怎样兼容NTFS格式的U盘移动硬盘?...
  7. java简单的文本编辑器_采用java语言如何建立一个简单的文本编辑器
  8. Python语法糖系列
  9. 2011年12月13日 timeout 与 refused windows clipbrd
  10. JAVA 调用 labview_制作软接入点ESP8266并通过labview读取数据
  11. 栋的月结 | 第三回合(定期更新、动态、架构、云技术、算法、后端、前端、收听/收看、英文、书籍、影视、好歌、新奇)[含泪总结.. 憋泪分享!]
  12. 2008-03-31 雨纷飞
  13. 知识点索引:一元函数的极值
  14. USB移动硬盘WinPE启动盘的制作方法
  15. 计算机专业省赛一等奖有什么好处,厉害了!计算机应用专业的他获省级书法比赛一等奖...
  16. Niagara N4 与物联网的学习经验分享(一 New Station)
  17. Socket网络编程——C++版源码
  18. L1正则化及其稀疏性的傻瓜解释
  19. @[TOC](CDN防御与高防服务器防御的区别
  20. c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...

热门文章

  1. openjudge 1.7.18 验证子串
  2. Linux系统下便捷使用中国知网的方式
  3. 学3D建模,需要哪些基础?
  4. 生物技术公司Acelyrin纳斯达克上市:市值超20亿美元 路演PPT曝光
  5. Orange与中兴通讯完成欧洲首个100% 5G通话
  6. 印刷电路板(pcb)设计与制作(第2版)pdf_【干货】深度解析铣刀式PCBA分板机应用于邮票孔电路板工艺技术,你值得拥有!...
  7. C# 发送xml报文到用友U8生成凭证系列二(基础代码)
  8. 最小的语言符号是A词B语素C音素D义素,高等教育自学考试《语言学概论》试题9.docx...
  9. 内容付费行业将如何发展
  10. nsis制作新版迅雷安装界面