前面我们讲了List集合的一些使用方法与场景
Python100天31:如何理解数组(list)、二级数组、series
Python100天33:利用list 解决日历行程时间段重叠问题
这些运算是常用且共通性,有人想到了把这些有关联的运算加以提取,做成工具
于是 Numpy出来了 Pandas也应运而生了。
Numpy介绍
NumPy 这个词来源于两个单词 – Numerical和Python。
一个用python实现的科学计算,包括:
- 一个强大的N维数组对象Array;
- 比较成熟的(广播)函数库;
- 用于整合C/C++和Fortran代码的工具包;
- 实用的线性代数、傅里叶变换和随机数生成函数。
- numpy和稀疏矩阵运算包scipy配合使用更加方便。
- 执行数学任务,如:数值积分、微分、内插、外推等。
- 计算机中的图像表示为多维数字数组。NumPy 库函数来 处理图像。 镜像图像、按特定角度旋转图像等。
- 对矩阵进行各种数值计算。如:矩阵乘法、求逆、换位、加法等。
Pandas 是什么?与 NumPy是什么关系。
Pandas是基于NumPy 的一种工具,
解决数据分析任务而创建的。 它是使Python成为强大而高效的数据分析环境的重要因素
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
- Time- Series:以时间为索引的Series。
- DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
- Panel :三维的数组,可以理解为DataFrame的容器。
- Panel4D:是像Panel一样的4维数据容器。
从以上Python 集合,NumPy数组到 Pandas是在前者基础上不数据产生的工具。
这三都有一个层层递进的关系,解决不同层面共性问题,简单日常操作。
Numpy强大数组能力的直观感受
想象成这样一个情景,一堆学生站一队 编号从 0 1 2 3 4 5 6 7 8
- 需求:如何快速的生成一队8个学生
- 变换:将学生变成 4 行2列的风格二维数组
import numpy as np
a = np.arange(8)
print ('原始数组:')
print (a)
print ('\n')
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)
[
[0 1]
[2 3]
[4 5]
[6 7]
]
以上就是一个将一个一维数组变形为二维数组。即数组中的元素也是数组。
如果我们想反一个二级数组变形为一个一维数组
想象成一个方队 的同学,从多行多列的队伍变成一横条
下面是把一个 2 行 4列的二维数组变成一个一维数组
a = np.arange(8).reshape(2,4)
print ('原数组:')
print (a)
print ('\n')
# 默认按行
print ('展开的数组:')
print (a.flatten())
print ('\n')
print ('以 F 风格顺序展开的数组:')
print (a.flatten(order = 'F'))
- a.flatten() 以行的维度首尾连接
- a.flatten(order = 'F') 以列为单位首尾相连
如果要把一个二维数组的对换怎么办?
三行四列
[
[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
]
四行三列
[
[ 0 4 8 ]
[ 1 5 9 ]
[ 2 6 10]
[ 3 7 11]
]
代码如下
import numpy as np
a = np.arange(12).reshape(3,4)
print ('原数组:')
print (a )
print ('\n')
print ('对换数组:')
print (np.transpose(a))
还有很多这样的数据变换操作
这些你所有 想到 的地方numpy,pandas 都给我们封装好了。在某种程度上来说编程也是解决实际问题,而我们创建工具的目的也是解决实际问题。这就是为什么老外在IT领域不断创新的源泉,解决问题提取共性,做成工具不断完善。而国内行业基本上是拿来主义会用即可,确实如此会用就行。这也是我们在IT基础领域一直落后国外的核心原因。