最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:13:51
文档

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

Python:Pandas如何高效运算的方法:本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好。测试环境如下:windows 7, 64位python 3.5pandas 0.19.2numpy 1.11.3jupyter notebook需要说明的是,不同的系统,不同的电脑配置,不同的软件环境,运行结果可能有些差异。
推荐度:
导读Python:Pandas如何高效运算的方法:本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好。测试环境如下:windows 7, 64位python 3.5pandas 0.19.2numpy 1.11.3jupyter notebook需要说明的是,不同的系统,不同的电脑配置,不同的软件环境,运行结果可能有些差异。


本文就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中,用下面的代码分别去测试,来查看不同方法下的运行时间,做一个对比。

    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())
    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:Pandas如何高效运算的方法

    Python:Pandas如何高效运算的方法:本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好。测试环境如下:windows 7, 64位python 3.5pandas 0.19.2numpy 1.11.3jupyter notebook需要说明的是,不同的系统,不同的电脑配置,不同的软件环境,运行结果可能有些差异。
    推荐度:
    标签: 操作 方法 如何
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top