34-Pandas和NumPy的比较

Pandas和NumPy的比较

我们知道 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=" ")

输出结果:

<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
import numpy as np
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")
print("替换之前:\n",df)
# 将空值替换为False,非空值替换为True
df.loc[df['COMM'].notnull(),'COMM']=True
df.loc[df['COMM'].isnull(),'COMM']=False
print("替换之后:\n",df)
#将COMM作为行索引
df.set_index('COMM',inplace=True)
print("将COMM列做为行索引:\n",df)

输出结果:

替换之前:
     EMPNO   ENAME        JOB     MGR    HIREDATE   SAL    COMM  DEPTNO
0    7369   SMITH      CLERK  7902.0  1980-12-17   800     NaN      20
1    7499   ALLEN   SALESMAN  7698.0  1981-02-20  1600   300.0      30
2    7521    WARD   SALESMAN  7698.0  1981-02-22  1250   500.0      30
3    7566   JONES    MANAGER  7839.0  1981-04-02  2975     NaN      20
4    7654  MARTIN   SALESMAN  7698.0  1981-09-28  1250  1400.0      30
5    7698   BLAKE    MANAGER  7839.0  1981-05-01  2850     NaN      30
6    7782   CLARK    MANAGER  7839.0  1981-06-09  2450     NaN      10
7    7788   SCOTT    ANALYST  7566.0  1987-04-19  3000     NaN      20
8    7839    KING  PRESIDENT     NaN  1981-11-17  5000     NaN      10
9    7844  TURNER   SALESMAN  7698.0  1981-09-08  1500     0.0      30
10   7876   ADAMS      CLERK  7788.0  1987-05-23  1100     NaN      20
11   7900   JAMES      CLERK  7698.0  1981-12-03   950     NaN      30
12   7902    FORD    ANALYST  7566.0  1981-12-03  3000     NaN      20
13   7934  MILLER      CLERK  7782.0  1982-01-23  1300     NaN      10
替换之后:
     EMPNO   ENAME        JOB     MGR    HIREDATE   SAL   COMM  DEPTNO
0    7369   SMITH      CLERK  7902.0  1980-12-17   800  False      20
1    7499   ALLEN   SALESMAN  7698.0  1981-02-20  1600   True      30
2    7521    WARD   SALESMAN  7698.0  1981-02-22  1250   True      30
3    7566   JONES    MANAGER  7839.0  1981-04-02  2975  False      20
4    7654  MARTIN   SALESMAN  7698.0  1981-09-28  1250   True      30
5    7698   BLAKE    MANAGER  7839.0  1981-05-01  2850  False      30
6    7782   CLARK    MANAGER  7839.0  1981-06-09  2450  False      10
7    7788   SCOTT    ANALYST  7566.0  1987-04-19  3000  False      20
8    7839    KING  PRESIDENT     NaN  1981-11-17  5000  False      10
9    7844  TURNER   SALESMAN  7698.0  1981-09-08  1500   True      30
10   7876   ADAMS      CLERK  7788.0  1987-05-23  1100  False      20
11   7900   JAMES      CLERK  7698.0  1981-12-03   950  False      30
12   7902    FORD    ANALYST  7566.0  1981-12-03  3000  False      20
13   7934  MILLER      CLERK  7782.0  1982-01-23  1300  False      10
将COMM列做为行索引:
        EMPNO   ENAME        JOB     MGR    HIREDATE   SAL  DEPTNO
COMM                                                             
False   7369   SMITH      CLERK  7902.0  1980-12-17   800      20
True    7499   ALLEN   SALESMAN  7698.0  1981-02-20  1600      30
True    7521    WARD   SALESMAN  7698.0  1981-02-22  1250      30
False   7566   JONES    MANAGER  7839.0  1981-04-02  2975      20
True    7654  MARTIN   SALESMAN  7698.0  1981-09-28  1250      30
False   7698   BLAKE    MANAGER  7839.0  1981-05-01  2850      30
False   7782   CLARK    MANAGER  7839.0  1981-06-09  2450      10
False   7788   SCOTT    ANALYST  7566.0  1987-04-19  3000      20
False   7839    KING  PRESIDENT     NaN  1981-11-17  5000      10
True    7844  TURNER   SALESMAN  7698.0  1981-09-08  1500      30
False   7876   ADAMS      CLERK  7788.0  1987-05-23  1100      20
False   7900   JAMES      CLERK  7698.0  1981-12-03   950      30
False   7902    FORD    ANALYST  7566.0  1981-12-03  3000      20
False   7934  MILLER      CLERK  7782.0  1982-01-23  1300      10

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

import pandas as pd
import numpy as np
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")

# 将空值替换为False,非空值替换为True
df.loc[df['COMM'].notnull(),'COMM']=True
df.loc[df['COMM'].isnull(),'COMM']=False

#将COMM作为行索引
df.set_index('COMM',inplace=True)

print("获取行索引为True的数据:\n",df.loc[True])

输出结果:

获取行索引为True的数据:
       EMPNO   ENAME       JOB     MGR    HIREDATE   SAL  DEPTNO
COMM                                                           
True   7499   ALLEN  SALESMAN  7698.0  1981-02-20  1600      30
True   7521    WARD  SALESMAN  7698.0  1981-02-22  1250      30
True   7654  MARTIN  SALESMAN  7698.0  1981-09-28  1250      30
True   7844  TURNER  SALESMAN  7698.0  1981-09-08  1500      30

重塑数组形状

在不改变数组数据的情况下,对数组进行变形操作,即改变数组的维度,比如 23(两行三列)的二维数组变维 32(三行两列)的二维数组。变形操作可以通过 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 进行简单的总结,如下表所示:

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

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

参数说明如下:

  • dtype:可选参数,表示数据类型;
  • copy:布尔值参数,默认值为 Fales,表示返回值不是其他数组的视图。

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

import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")

arr = df.to_numpy()
print("转换后的数据类型:\n",type(arr))
print("DataFrame转换为数组:\n",arr)

输出结果:

转换后的数据类型:
 <class 'numpy.ndarray'>
DataFrame转换为数组:
 [[7369 'SMITH' 'CLERK' 7902.0 '1980-12-17' 800 nan 20]
 [7499 'ALLEN' 'SALESMAN' 7698.0 '1981-02-20' 1600 300.0 30]
 [7521 'WARD' 'SALESMAN' 7698.0 '1981-02-22' 1250 500.0 30]
 [7566 'JONES' 'MANAGER' 7839.0 '1981-04-02' 2975 nan 20]
 [7654 'MARTIN' 'SALESMAN' 7698.0 '1981-09-28' 1250 1400.0 30]
 [7698 'BLAKE' 'MANAGER' 7839.0 '1981-05-01' 2850 nan 30]
 [7782 'CLARK' 'MANAGER' 7839.0 '1981-06-09' 2450 nan 10]
 [7788 'SCOTT' 'ANALYST' 7566.0 '1987-04-19' 3000 nan 20]
 [7839 'KING' 'PRESIDENT' nan '1981-11-17' 5000 nan 10]
 [7844 'TURNER' 'SALESMAN' 7698.0 '1981-09-08' 1500 0.0 30]
 [7876 'ADAMS' 'CLERK' 7788.0 '1987-05-23' 1100 nan 20]
 [7900 'JAMES' 'CLERK' 7698.0 '1981-12-03' 950 nan 30]
 [7902 'FORD' 'ANALYST' 7566.0 '1981-12-03' 3000 nan 20]
 [7934 'MILLER' 'CLERK' 7782.0 '1982-01-23' 1300 nan 10]]

可以通过 type 查看其类型:numpy.ndarray

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值