Pandas和NumPy的比较

1年前 (2024-04-26)
我们知道 Pandas 是在 NumPy 的基础构建而来,因此,熟悉 NumPy 可以更加有效的帮助我们使用 Pandas。

NumPy 主要用 C语言编写,因此,在计算还和处理一维或多维数组方面,它要比 Python 数组快得多。关于 NumPy 的学习,可以参考《Python NumPy教程》。

创建数组

数组的主要作用是在一个变量中存储多个值。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=" ")

输出结果:

<class 'numpy.ndarray'>

打印新建数组: 2 4 6 8 10

虽然 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=" ")

输出结果:

<class 'array.array'>

新建数组: 2 4 6 8 10

布尔索引

布尔索引是 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)


输出结果:

name age

True Smith 28

True William 39

False Phill 34

True Parker 36

然后使用.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])

输出结果:

name age

True Smith 28

True William 39

True Parker 36

重塑数组形状

在不改变数组数据的情况下,对数组进行变形操作,即改变数组的维度,比如 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)

输出结果:

原数组:

[ 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]]

Pdans与NumPy区别

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

比较项

Pandas

NumPy

适应性

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 对象转换为 NumPy ndarray 数组,并将其返回。函数的语法格式如下:

DataFrame.to_numpy(dtype=None, copy=False)   

参数说明如下:

  • 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))

输出结果:

[[2 4.0 Timestamp('2020-12-23 00:00:00')]

[3 5.8 Timestamp('2020-12-24 00:00:00')]]

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

numpy.ndarray

示例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为数组array

arr = info.to_numpy()

print('\nNumpy Array\n----------\n', arr)

输出结果:

DataFrame

----------

x y z

0 17 62 35

1 25 36 54

2 42 20 15

3 48 62 76

Numpy Array

----------

[[17 62 35]

[25 36 54]

[42 20 15]

[48 62 76]]