numpy和pandas
numpy基础
数组创建
1 # 创建一个二维数组 2 import numpy as np 3 tang_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 4 tang_array.shape 5 tang_array.size

图1-1 打印数组行列数以及元素个数
数组切片
数组切片,逗号左边表示对行进行处理,逗号右边对列进行处理,冒号表示对所有行或者列进行处理.这种切片方式对dataframe无效.
1 # 第0行,前两个元素 2 tang_array[0, 0:2] 3 # 所有行,第二列数据 4 tang_array[:, 1]
数组复制
直接用'='复制,改变新数组原数组也会对应变化,如果希望原数组不受新数组影响,可以使用copy函数复制.
1 tang_array1 = tang_array 2 tang_array2 = tang_array.copy()
构造数组
如果遇到逻辑判断,将数组对应元素进行逻辑判断,返回新数组。
1 # 构造一个等差数组 2 arange_array = np.arange(0, 100, 10) 3 # 构造一个10个数的随机数组 4 random_array = np.random.rand(10) 5 mask = random_array > 0.5

图 1-2 mask数组
改变数组类型
1 import numpy as np 2 tang_array = np.array([1, 2, 3, 4, 5],dtype=np.int32) 3 # 不影响原数组 4 arr2=tang_array.astype(np.float32)
numpy运算
求和
求和可以写成np.sum(),也可以写成arr.sum()
1 import numpy as np 2 tang_array = np.array([[1, 2, 3], [4, 5, 6]]) 3 np.sum(tang_array)

图2-1 数组所有元素和
指定维度求和
求乘积一样,函数式prod()
1 # 竖着求和 2 np.sum(tang_array,axis=0) 3 # 横着求和 4 np.sum(tang_array,axis=1)

图 2-2 横竖求和
最值
均值同理,函数是mean()
1 import numpy as np 2 tang_array = np.array([[1, 2, 3], [4, 5, 6]]) 3 # 全局最值 4 np.min(tang_array) 5 # 单行单列最值 6 Vertically = tang_array.min(axis=0) 7 Sideways = tang_array.min(axis=1)

图 2-3 各个行和列的最小值
四舍五入
1 import numpy as np 2 tang_array = np.array([[1, 2, 3.1, 4.6, 6.1]]) 3 array_round = tang_array.round() 4 #保留一位有效数字 5 array_round = tang_array.round(decimals=1)

图2-4 四舍五入和保留一位有效数字
形状操作
1 import numpy as np 2 # 创建0-10包左不包右的数组 3 tang_array = np.arange(10) 4 # reshape 不会影响原数组,需要一个数组来接收 5 arr=tang_array.reshape(2,5) 6 # shape会影响原数组 7 tang_array.shape = 2, 5
数组拼接
1 import numpy as np 2 a = np.array([[123, 345, 567], [43, 23, 45]]) 3 b = np.array([[12, 343, 56], [132, 454, 56]]) 4 # axis=1横着拼,axis=0竖着拼 5 c = np.concatenate((a, b), axis=1)

图2-5 两个二维数组横着合并后的数组
Pandas基础
1 import pandas as pd 2 train=pd.read_csv('train.csv') 3 train.index # 索引值 4 train.values # 打印value值 5 train.dtypes # 打印每个列的类型
我们可以将某一特征作为索引值,index是新建后的新数据表.
1 index=train.set_index('PassengerId') 2 age = index['Age'] 3 # 求最小值 4 age_min = age.min()
我们还可以查看多个特征的数据
1 index[['Age','Pclass']] 2 # 里面需要写成二维数组,不能写一维
定位
我们定位主要用到loc和iloc,loc用label定位,iloc用position定位.iloc逗号前面不能写逻辑判断,只能写position.
1 import pandas as pd 2 train=pd.read_csv('train.csv') 3 index=train.set_index('PassengerId') 4 index.iloc[:,0]

图3-1 所有行第一列的数据
索引显示了索引名,但是Survived数据上面没显示label名,因为index.iloc[:,0]是series,如果我们将它转化为dataframe,那么就能显示label名了.我们使用loc里面第一个逻辑判断本质上是找索引.
1 # 我们还可以在切片时进行逻辑判断 2 # 首先筛选出sex为male的数据集,进一步筛选出 name和age标签 3 train.loc[train['Sex']=='male',['Name','Age']]
bool索引
1 new=train.loc[train['Sex']=='male',['Name','Age']] 2 # 返回结果是series,其实就是索引值 3 new['Age']>25 4 # 根据索引值查找出相关数据 5 new[new['Age']>25]

图 3-2 new数据集

图3-3 查出满足条件的索引

图 3-4 根据索引查找数据
写熟练以后可以一步到位,双括号里面填写要筛选的label,后面单括号里面写筛选逻辑.筛选完毕后,可以用loc iloc进一步修饰.
1 train[['Name','Ticket']][(train['Survived']==1)&(train['Age']>25)]
操作dataframe
1 import pandas as pd 2 # 数据 3 data = [[1, 2, 3], [4, 5, 6]] 4 # 索引 5 index = ['a', 'b'] 6 # 列名 7 columns = ['A', 'B', 'C'] 8 df = pd.DataFrame(data=data, index=index, columns=columns) 9 #查询 10 df[:2] # 查询行数据 11 df['A'] #查询特征数据
1 #删除 2 #删除一行 3 new.drop(['a'],axis=0,inplace=1) 4 #删除一列 5 new.drop('B',axis=1)
inplace=1表示对原数组进行修改,如果drop多条数据需要用[... ]
合并
1 # 列合并 2 df3 = pd.concat([df, df2], axis=0) 3 # 行合并 4 df3 = pd.concat([df, df2], axis=1)

浙公网安备 33010602011771号