分享

Pandas和NumPy的比较

 码农9527 2021-10-14

    我们知道Pandas是在NumPy的基础构建而来,因此,熟悉NumPy可以更加有效的帮助我们使用Pandas。

    NumPy主要用C语言编写,因此,在计算还和处理一维或多维数组方面,它要比Python数组快得多。

    创建数组

    数组的主要作用是在一个变量中存储多个值。NumPy可以轻松地处理多维数组,示例如下:

import numpy as np
arr = np.array([2, 4, 6, 8, 10, 12])
print(type(arr))print ("打印新建数组: ",end="")#使用for循环读取数据 for l in range (0,5): 
 print (arr[l], end=" ")1234567复制代码类型:[python]

    输出结果:

<class 'numpy.ndarray'>
打印新建数组: 2 4 6 8 1012复制代码类型:[python]

    虽然Python本身没有数组这个说法,不过Python提供一个array模块,用于创建数字、字符类型的数组,它能够容纳字符型、整型、浮点型等基本类型。示例如下:

import array#注意此处的 'l' 表示有符号int类型 arr = array.array('l', [2, 4, 6, 8, 10, 12])
print(type(arr))print ("新建数组: ",end="") 
for i in range (0,5): 
 print (arr[i], end=" ") 1234567复制代码类型:[python]

    输出结果:

<class 'array.array'>
新建数组: 2 4 6 8 1012复制代码类型:[python]

    布尔索引

    布尔索引是NumPy的重要特性之一,通常与Pandas一起使用。它的主要作用是过滤DataFrame中的数据,比如布尔值的掩码操作。

    下面示例展示了如何使用布尔索引访问DataFrame中的数据。

    首先创建一组包含布尔索引的数据,如下所示:

import pandas as pd 
dict = {'name':["Smith", "William", "Phill", "Parker"],  
  'age': ["28", "39", "34", "36"]}  
info = pd.DataFrame(dict, index = [True, True, False, True])  
print(info)12345复制代码类型:[python]

    输出结果:

 name ageTrue  Smith  28True   William  39False Phill  34True Parker  3612345复制代码类型:[python]

    然后使用.loc访问索引为True的数据。示例如下:

import pandas as pd   
dict = {'name':["Smith", "William", "Phill", "Parker"],  
  'age': ["28", "39", "34", "36"]}  
info = pd.DataFrame(dict, index = [True, True, False, True])#返回所有为 True的数据  print(info.loc[True]) 123456复制代码类型:[python]

    输出结果:

   name ageTrue Smith  28True  William  39True   Parker  361234复制代码类型:[python]

    重塑数组形状

    在不改变数组数据的情况下,对数组进行变形操作,即改变数组的维度,比如2*3(两行三列)的二维数组变维3*2(三行两列)的二维数组。变形操作可以通过reshape()函数实现。

    示例如下:

import numpy as np 
arr = np.arange(16) 
print("原数组: \n", arr) 
arr = np.arange(16).reshape(2, 8) 
print("\n变形后数组:\n", arr) 
arr = np.arange(16).reshape(8 ,2) 
print("\n变形后数组:\n", arr)1234567复制代码类型:[python]

    输出结果:

    原数组:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]

变形后数组:
[[ 0  1  2  3  4  5  6  7]
[ 8  9 10 11 12 13 14 15]]

变形后数组:
[[ 0  1]
[ 2  3]
[ 4  5]
[ 6  7]
[ 8  9]
[10 11]
[12 13]
[14 15]]123456789101112131415复制代码类型:[python]

    Pdans与NumPy区别

    Pandas和NumPy被认为是科学计算与机器学习中必不可少的库,因为它们具有直观的语法和高性能的矩阵计算能力。下面对Pandas与NumPy进行简单的总结,如下表所示:  

比较项PandasNumPy
适应性Pandas主要用来处理类表格数据。NumPy 主要用来处理数值数据。
工具Pandas提供了Series和DataFrame数据结构。NumPy 构建了 ndarray array来容纳数据。
性能Pandas对于处理50万行以上的数据更具优势。NumPy 则对于50万以下或者更少的数据,性能更佳。
内存利用率与 NumPy相比,Pandas会消耗大量的内存。NumPy 会消耗较少的内存。
对象Pandas 提供了 DataFrame 2D数据表对象。NumPy 则提供了一个多维数组 ndarray 对象

    转换ndarray数组

    在某些情况下,需要执行一些NumPy数值计算的高级函数,这个时候您可以使用to_numpy()函数,将DataFrame对象转换为NumPyndarray数组,并将其返回。函数的语法格式如下:

DataFrame.to_numpy(dtype=None, copy=False)   1复制代码类型:[python]

    参数说明如下:

    dtype:可选参数,表示数据类型;

    copy:布尔值参数,默认值为Fales,表示返回值不是其他数组的视图。

    下面使用示例,了解该函数的使用方法。示例1:

info = pd.DataFrame({"P": [2, 3], "Q": [4.0, 5.8]})#给info添加R列 info['R'] = pd.date_range('2020-12-23', periods=2)
print(info)#将其转化为numpy数组 n=info.to_numpy()
print(n)
print(type(n))12345678复制代码类型:[python]

    输出结果:

[[2 4.0 Timestamp('2020-12-23 00:00:00')]
[3 5.8 Timestamp('2020-12-24 00:00:00')]]12复制代码类型:[python]

    可以通过type查看其类型,输出如下:

numpy.ndarray1复制代码类型:[python]

    示例2:

import pandas as pd 
#创建DataFrame对象info = pd.DataFrame([[17, 62, 35],[25, 36, 54],[42, 20, 15],[48, 62, 76]], 
columns=['x', 'y', 'z']) 
print('DataFrame\n----------\n', info) 
#转换DataFrame为数组arrayarr = info.to_numpy() 
print('\nNumpy Array\n----------\n', arr) 12345678复制代码类型:[python]

    输出结果:

DataFrame
----------
  x   y   z0  17  62  351  25  36  542  42  20  153  48  62  76Numpy Array
----------
[[17 62 35]
[25 36 54]
[42 20 15]
[48 62 76]]

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多