Python: Pandas如何高效运算的方法


本文摘自php中文网,作者巴扎黑,侵删。

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

测试环境如下:

  • windows 7, 64位

  • python 3.5

  • pandas 0.19.2

  • numpy 1.11.3

  • jupyter notebook

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

1 测试内容

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

三种方法分别是:

  1. python的for循环

  2. Pandas的Series

  3. Numpy的ndarray

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

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

1

2

3

4

5

6

7

8

import pandas as pdimport 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())

1

2

3

4

5

6

7

8

9

10

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循环

1

2

%%timeit# 当DataFrame的行数大于等于1000000时,请用 %%time 命令for i in range(len(df)):

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

1

100 loops, best of 3: 12.8 ms per loop

  • Method 2: Series

1

type(df['a'])

1

pandas.core.series.Series

1

2

%%timeit

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

1

2

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

1

type(df['a'].values)

1

numpy.ndarray

1

2

%%timeit

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

1

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: Pandas如何高效运算的方法的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python之正弦曲线实现方法分析

Python多重继承中的菱形继承

Python实现自动刷博客浏览量经验分享

Python2和3区别大吗

Python能做什么?Python爬虫是什么?

Python线程下timer对象、lock对象和rlock对象的简单介绍

mac 正确地配置 scipy 开发环境

超简单的Python爬虫之网易云音乐的下载

Python类中怎么定义方法

Python和163邮箱授权码发送邮件的分析与实现(代码)

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...