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)

 

 

 

posted @ 2021-10-04 14:25  李点  阅读(94)  评论(0)    收藏  举报