5. 循环矩阵
for循环
## 1. 迭代每一行 for row in A: print(row) 输出: [3 4 5 6] [ 7 8 9 10] [11 12 13 14] ## 2. 迭代每一列 # for col in A: #失败 # print(col) print(A.T) #----转置A 输出: [[ 3 7 11] [ 4 8 12] [ 5 9 13] [ 6 10 14]] for col in A.T: # 通过转置迭代 print(col) 输出: [[ 3 7 11] [ 4 8 12] [ 5 9 13] [ 6 10 14]] ## 3. 迭代出每个元素,先用flat迭代器将A平铺,再进行迭代 print(A.flatten()) #用flatten()返回的是array 输出: [ 3 4 5 6 7 8 9 10 11 12 13 14] for item in A.flat: print(item) 输出: 3 4 5 6 7 8 9 10 11 12 13 14
6. array的合并
# 定义一个array A = np.array([1,1,1]) B = np.array([2,2,2]) print('--------上下合并两个array——vatack()-----------') C = np.vstack((A,B)) #vertical stack 上下合并 print(C) print(A.shape,C.shape) 输出: [[1 1 1] [2 2 2]] (3,) (2, 3) print('--------左右合并两个array——hstack()-----------') D = np.hstack((A,B)) # horizontal stack左右合并 print(D) print(A.shape,D.shape) 输出: [1 1 1 2 2 2] (3,) (6,) print('----------序列转置仍是序列--------------------') print(A.T.shape) #(3,) 序列的转置仍是序列 输出:(3,) print('----------------序列变为矩阵---------------') print(A[:,np.newaxis]) print(A[:,np.newaxis].shape) # (3, 1) np.newaxis 给数组加一个维度 输出: [[1] [1] [1]] (3, 1) print(A[np.newaxis,:]) print(A[np.newaxis,:].shape) #(1, 3) 输出: [[1 1 1]] (1, 3) print('-----------------转为矩阵之后合并----------------------') A1 = np.array([1,1,1])[:,np.newaxis] B1 = np.array([2,2,2])[:,np.newaxis] C1 = np.vstack((A,B)) #纵向合并 D1 = np.hstack((A,B)) #横向合并 print(C1) 输出: [[1 1 1] [2 2 2]] print(D1) 输出: [1 1 1 2 2 2] print('------------多个array合并-------------------------') A1 = np.array([1,1,1])[:,np.newaxis] B1 = np.array([2,2,2])[:,np.newaxis] C2 = np.concatenate((A1,B1,B1,A1),axis = 0) #可以在axis处定义合并方式,axis=0,纵向合并;axis=1横向合并 D2 = np.concatenate((A1,B1,B1,A1),axis = 1) print(C2) 输出: [[1] [1] [1] [2] [2] [2] [2] [2] [2] [1] [1] [1]] print(D2) 输出: [[1 2 2 1] [1 2 2 1] [1 2 2 1]]
7. array 分割
- 对等分割:
np.split()
- 不等量分割:
np.array_split()
#创建array A = np.arange(12).reshape((3,4)) print(A) 输出: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] print('------------对等分割 np.split()-------------------') print(np.split(A,3,axis = 0)) # split(对哪个array分割,分割成几块,axis=0/1);axis=0,对列操作,每列分为几块,合并到一块;axis=1,对行操作,玫红分为几块,再和一块 输出: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] print(np.split(A,2,axis = 1)) 输出: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] print('---------------不等量分割 np.array_split()------------------') print(np.array_split(A,3,axis = 1)) 输出: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] print(np.vsplit(A,3)) #上下分割 输出: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] print(np.hsplit(A,2)) #左右分割 输出: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])]
8. numpy copy & deep copy
# 定义一个array a = np.arange(4) print(a) 输出: [0 1 2 3] b = a c = a d = b a[0]=11 a 输出:array([11, 22, 0, 3]) b is a #判断a与b是否相等 输出:True d[1:3]=[22,33] a 输出:array([11, 22, 33, 3]) # 把a的值赋给b,但不关联,改变a的值,b不变 print(a) b = a.copy() # deep copy a[2]=33 print(a) print(b) 输出: [ 0 1 11 3]---a [ 0 1 33 3]---a' [ 0 1 11 3]---b
pandas
1. pandas安装
- 使用 pip 安装 pandas:
pip install pandas
具体可见:
pandas&numpy安装 - 安装成功后,我们就可以导入 pandas 包使用:
import pandas as pd
- 事例
import pandas as pd # 查看pandas版本 pd.__version__ ## 输出:'1.4.3' # 实例 import pandas as pd mydataset = { 'sites': ["Google", "Runoob", "Wiki"], 'number': [1, 2, 3] } myvar = pd.DataFrame(mydataset) print(myvar) # 输出结果如下图:
2. 数据结构 - Series
- Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
- Series 由索引(index)和列组成,函数如下:
- pandas.Series( data, index, dtype, name, copy)
- 参数说明:
- data:一组数据(ndarray 类型)。
- index:数据索引标签,如果不指定,默认从 0 开始。
- dtype:数据类型,默认会自己判断。
- name:设置名称。
- copy:拷贝数据,默认为 False。
- 实例
import pandas as pd a = [1, 2, 3] myvar1 = pd.Series(a) print(myvar1) # 输出结果如下图:
3. 数据结构 - DataFrame
- DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
- DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
4. 创建DataFrame
4.1 使用列表创建
import pandas as pd data = [['Google',10],['Runoob',12],['Wiki',13]] df = pd.DataFrame(data,columns=['Site','Age'],dtype=float) print(df) # 输出结果如下图:
4.2 使用ndarrays 建
以下实例使用 ndarrays 创建,ndarray 的长度必须相同, 如果传递了 index,则索引的长度应等于数组的长度。如果没有传递索引,则默认情况下,索引将是range(n),其中n是数组长度。
import pandas as pd data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]} df = pd.DataFrame(data) print (df) # 输出结果如下图:
4.3 使用字典创建
import pandas as pd data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}] df = pd.DataFrame(data) df # 输出结果如下图:
没有对应的部分数据为 NaN。
4.4 实例 - loc
- 实例1——返回指定行数据
使用 loc
属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
part1: 输出单行数据
import pandas as pd data={ 'calories':[420,380,390], 'duration':[50,40,45] } # 数据载入到DataFrame df=pd.DataFrame(data) # 返回第一行 print(df.loc[0]) # 返回第二行 print(df.loc[1]) # 输出结果如下图:
注意:返回结果其实就是一个 Pandas Series 数据。
part2: 输出多行数据
# 返回第一行和第二行 print(df.loc[[0, 1]]) # 输出结果如下图:
注意:返回结果其实就是一个 Pandas DataFrame 数据。
- 实例2——指定索引值
import pandas as pd data = { 'calories':[20,30,40], 'duration':[50,40,45] } # 指定索引值 df = pd.DataFrame(data,index=['day1','day2','day3']) df #输出结果如下图:
- 实例3——返回指定索引-对应到某一行
Pandas 可以使用loc
属性返回指定索引-对应到某一行:
import pandas as pd data = { 'calories':[20,30,40], 'duration':[50,40,45] } # 指定索引值 df = pd.DataFrame(data,index=["day1","day2","day3"]) # 指定索引 print(df.loc["day2"]) # 输出结果如下图:
5. pandas - csv文件
- CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
- 以“match.csv"为例,我所使用的编辑器为“jupyter notebook”,安装教程见链接:jupyter notebook安装教程
如需csv文件,可以私信我。
导入文件
jupyter notebook 点击右上角“upload”,选择要导入的文件,上传即可。
读取数据:
import pandas as pd df = pd.read_csv('match.csv') # 注意文件要用引号引起来 df # 输出结果如下:
用to_string()
返回DataFrame类型数据:
import pandas as pd df = pd.read_csv('match.csv') print(df.to_string()) #to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 ... 代替。 # 输出结果如下图:
实例: 使用to_csv
将 DataFrame 存储为 csv 文件:输入如下代码,运行后便可以在jupyter notebook首页看到保存后的CSV文件
import pandas as pd #三个字段 name,site,age nme = ["Goole","Runboo","Tabao","Wiki"] st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"] ag = [90,40,80,98] #字典 dict = {'name':nme,'site':st,'age':ag} df = pd.DataFrame(dict) #保存 dataframe df.to_csv('site.csv')
6. pandas - 数据处理
6.1 head()
head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。
# 读取前五行 import pandas as pd df = pd.read_csv("match.csv") df.head(5)
6.2 tail()
tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。
import pandas as pd df = pd.read_csv("match.csv") #读取末尾10行 df.tail(10)
6.3 info()
info()
方法返回表格的一些基本信息:
import pandas as pd df = pd.read_csv('match.csv') df.info() # 输出结果如下:
non-null 为非空数据,我们可以看到上面的信息中,总共 458 行,College 字段的空值最多。