安装 numpy和pandas
1 | sudo pip install numpy |
Numpy教程
Numpy 属性
- ndim:维度
- shape:行数和列数
- size:元素个数
Numpy 的创建 array
- array:创建数组
- dtype:指定数据类型
- zeros:创建数据全为0
- ones:创建数据全为1
- empty:创建数据接近0
- arrange:按指定范围创建数据
- linspace:创建线段
Numpy 基础运算
1 | import numpy as np |
- 减法
1 | c=a-b # array([10, 19, 28, 37]) |
- 加法
1 | c=a+b # array([10, 21, 32, 43]) |
- 乘法
1 | c=a*b # array([ 0, 20, 60, 120]) |
有所不同的是,在Numpy中,想要求出矩阵中各个元素的乘方需要依赖双星符号 **
- 乘法
1 | c=b**2 # array([0, 1, 4, 9]) |
- 三角函数
1 | c=10*np.sin(a) # cos tan |
- 逻辑判断
1 | print(b<3) |
上述运算均是建立在一维矩阵,即只有一行的矩阵上面的计算,如果我们想要对多行多维度的矩阵进行操作,需要对开始的脚本进行一些修改:
1 | a=np.array([[1,1],[0,1]]) |
此时构造出来的矩阵a和b便是2行2列的,其中 reshape 操作是对矩阵的形状进行重构, 其重构的形状便是括号中给出的数字。
- 矩阵乘法运算
1 | c_dot = np.dot(a,b) |
- 特定运算
- 求和:np.sum(A)
- 最小值:np.min(A)
- 最大值:np.max(A)
- 最小值索引:np.argmin(A)
- 最大值索引:np.argmax(A)
- 平均值:np.mean(A)
- 中位数:np.medium(A)
- 累加:np.cumsum(A)
- 累差:np.diff(A)
- 非零数:np.nonzero(A)
- 排序:np.sort(A)
- 矩阵反向(转置):np.transpose(A)或A.T
- 截断:np.clip(A,5,9) # 小于5为5,大于9为9
Numpy 索引
一维索引
1 | import numpy as np |
二维索引
1 | print(A[1][1]) # 8 |
这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。
1 | import numpy as np |
Numpy array 合并
- 上下合并 - np.vstack()
1 | import numpy as np |
- 左右合并 - np.hstack()
1 | D = np.hstack((A,B)) # horizontal stack |
- 转置操作 - np.newaxis()
1 | print(A[np.newaxis,:]) |
此时我们便将具有3个元素的array转换为了1行3列以及3行1列的矩阵了。
1 | import numpy as np |
- 合并操作需要针对多个矩阵或序列 - np.concatenate()
当你的合并操作需要针对多个矩阵或序列时,借助concatenate函数可能会让你使用起来比前述的函数更加方便:
1 | C = np.concatenate((A,B,B,A),axis=0) |
axis参数很好的控制了矩阵的纵向或是横向打印,相比较vstack和hstack函数显得更加方便。
Numpy array 分割
1 | A = np.arange(12).reshape((3, 4)) |
- 纵向分割
1 | print(np.split(A, 2, axis=1)) |
- 横向分割
1 | print(np.split(A, 3, axis=0)) |
- 错误的分割
范例的Array只有4列,只能等量对分,因此输入以上程序代码后Python就会报错。
1 | print(np.split(A, 3, axis=1)) |
- 不等量的分割
1 | print(np.array_split(A, 3, axis=1)) |
- 其他的分割方式
在Numpy里还有np.vsplit()与横np.hsplit()方式可用。
1 | print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0)) |
Numpy copy & deep copy
- copy() 的赋值方式没有关联性
1 | b = a.copy() # deep copy |
Pandas 教程
Numpy 和 Pandas 有什么不同
如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。
- Series
1 | import pandas as pd |
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引。于是会自动创建一个0到N-1(N为长度)的整数型索引。
- DataFrame
1 | dates = pd.date_range('20160101',periods=6) |
DataFrame是一个表格型的数据结构,它包含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典。
- DataFrame 的一些简单运用
1 | print(df['b']) |
我们在创建一组没有给定行标签和列标签的数据 df1:
1 | df1 = pd.DataFrame(np.arange(12).reshape((3,4))) |
默认的从0开始 index. 还有一种生成 df 的方法, 如下 df2:
1 | df2 = pd.DataFrame({'A' : 1., |
这种方法能对每一列的数据进行特殊对待. 如果想要查看数据中的类型, 我们可以用 dtype 这个属性:
1 | print(df2.dtypes) |
如果想看对列的序号:
1 | print(df2.index) |
同样, 每种数据的名称也能看到:
1 | print(df2.columns) |
果只想看所有df2的值:
1 | print(df2.values) |
想知道数据的总结, 可以用 describe():
1 | df2.describe() |
如果想翻转数据, transpose:
1 | print(df2.T) |
如果想对数据的 index 进行排序并输出:
1 | print(df2.sort_index(axis=1, ascending=False)) |
参考: