目录
numpy 模块
numpy属于第三方库,需要下载安装。
numpy库有两个作用:
- 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型;
- 计算速度快
创建矩阵方法:
import numpy as np #np是约定俗称将numpy简写 np.array() # 创建矩阵
- 一维矩阵
一维矩阵就相当于列表
arr =np.array([1,2,3]) print(arr) [1 2 3]
- 二维矩阵
arr = np.array([[1,2,3],[1,2,3]]) print(arr) [[1 2 3] [1 2 3]]
- 三维矩阵
arr = np.array([[[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]]]) print(arr) [[[1 2 3] [1 2 3]] [[1 2 3] [1 2 3]]]
获取矩阵的行列数
arr = np.array([[12,23,4],[12,3,4]]) print(arr) [[12 23 4] [12 3 4]] print(arr.shape) #获取矩阵的行和列 (2, 3) print(arr.shape[0]) # 获取矩阵的行 2 print(arr.shape[1]) # 获取矩阵的列 3
切割矩阵
切分矩阵类似于列表的切割,但是与列表的切割不同的是,矩阵的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。
arr = np.array([[12,23,4],[10,3,4],[2,4,5]]) print(arr) print(arr[:,:]) #取所有的元素,:默认所有 print(arr[0,:]) #取第一整行 print(arr[:,0]) # 取第一列 print(arr[1,2]) # 取第二行第三列的值 print(arr[arr>10]) # 取大于10的元素 [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[12 23 4] [10 3 4] [ 2 4 5]] #取所有的元素,:默认所有 ************************************************** [12 23 4] #取第一整行 ************************************************** [12 10 2] # 取第一列 ************************************************** 4 # 取第二行第三列的值 ************************************************** [12 23] # 取大于10的元素
矩阵元素替换
矩阵也是一个可变类型的数据,如果对矩阵进行替换操作,会修改矩阵的元素。
arr = np.array([[12,23,4],[10,3,4],[2,4,5]]) print(arr) arr[1,:]=0 # 取值第二行,并让第二行的元素都为0 print(arr) arr[arr>10] =0 # 取大于10的值,并让其为0 print(arr) [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[12 23 4] [ 0 0 0] # 取值第二行,并让第二行的元素都为0 [ 2 4 5]] ************************************************** [[ 0 0 4] # 取大于10的值,并让其为0 [10 3 4] [ 2 4 5]]
矩阵的合并
arr1 = np.array([[12,23,4],[10,3,4],[2,4,5]]) arr2 = np.array([[11,33,6],[11,7,6],[2,4,5]]) print(arr1) print('*'*50) print(arr2) print('*'*50) print(np.hstack((arr1,arr2))) # 合并两个矩阵的行,矩阵应该有相同的行 h表示水平 print(np.vstack((arr1,arr2))) #合并两个矩阵的列,矩阵应该有相同的列,v表示垂直 print(np.concatenate((arr1,arr2),axis=0)) #axis=0 表示合并两个矩阵的列,矩阵应该有相同的列,并且axis默认为0 print(np.concatenate((arr1,arr2),axis=1)) #axis=1 表示合并两个矩阵的行,矩阵应该有相同的行,axis默认为0 [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[11 33 6] [11 7 6] [ 2 4 5]] ************************************************** [[12 23 4 11 33 6] [10 3 4 11 7 6] [ 2 4 5 2 4 5]] # 合并两个矩阵的行,矩阵应该有相同的行 h表示水平 ************************************************** [[12 23 4] [10 3 4] [ 2 4 5] [11 33 6] [11 7 6] [ 2 4 5]] ************************************************** [[12 23 4] [10 3 4] [ 2 4 5] [11 33 6] [11 7 6] [ 2 4 5]] #axis=0 表示合并两个矩阵的列,矩阵应该有相同的列,并且axis默认为0 ************************************************** [[12 23 4 11 33 6] [10 3 4 11 7 6] [ 2 4 5 2 4 5]] #axis=1 表示合并两个矩阵的行,矩阵应该有相同的行,axis默认为0
通过函数创建矩阵
arange
arr =np.arange(1,10) #创建1-9 的数字 一维矩阵 print(arr) [1 2 3 4 5 6 7 8 9]
linspace/loqspace
print(np.linspace(0,20,6)) # 等差数列 取头也取尾,取6个数,并且前两个数之和等于后一个数 [ 0. 4. 8. 12. 16. 20.] print(np.logspace(0,20,6)) # 等比数列 取6个数 [1.e+00 1.e+04 1.e+08 1.e+12 1.e+16 1.e+20]
zeros/ones/eye/empty
print(np.zeros((3,4))) # 创建 3*4全是0的矩阵 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] print(np.ones((3,4))) # 创建3*4 全是1的矩阵 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] print(np.eye(3)) # 创建3个主元的单位矩阵 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] print(np.empty((4,4))) # 创建一个4*4的随机矩阵,里面的元素是随机生成的 [[6.23042070e-307 1.42417221e-306 1.37961641e-306 1.24610383e-306] [1.69118108e-306 8.06632139e-308 1.20160711e-306 1.69119330e-306] [1.78019082e-306 1.78020984e-306 6.23053954e-307 8.06635110e-308] [7.56603881e-307 1.78019082e-306 1.78020984e-306 1.60218627e-306]]
矩阵的运算
+ 两个矩阵对应元素相加 - 两个矩阵对应元素相减 * 两个矩阵对应元素相乘 / 两个矩阵对应元素相除,如果都是整数则取商 % 两个矩阵对应元素相除后取余数 **n 单个矩阵每个元素都取n次方,如**2:每个元素都取平方
pandas模块
pandas 是python数据分析的核心模块,它有五大功能:
- 支持文件存取操作,数据库(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
- 支持增删改查、切片、高阶函数、分组聚合等单表操作,以及和dict、list的互相转换。
- 支持多表拼接合并操作。
- 支持简单的绘图操作。
- 支持简单统计分析操作。
series (一维列表)
import numpy as np import pandas as pd arr = np.arange(1,10) print(arr) s= pd.Series(arr) print(s) [1 2 3 4 5 6 7 8 9] 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 dtype: int32
DataFrame
- 创建数据列表
import pandas as pd import numpy as np # 定义索引(行)的值 dates = pd.date_range('2019-01-01',periods=6) # 定义矩阵内的值 np.random.seed(1) arr = 10*np.random.randn(6,4) # 进行数据表的合并,column--队列 ,表示列 df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4']) print(df) c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407 2019-01-04 -3.224172 -3.840544 11.337694 -10.998913 2019-01-05 -1.724282 -8.778584 0.422137 5.828152 2019-01-06 -11.006192 11.447237 9.015907 5.024943
使用pandas读取字典形式的数据(数组的长度必须相同)
df2 = pd.DataFrame({'a':1,'b':[2,3],'c':np.arange(2),'d':'hello'}) print(df2) a b c d 0 1 2 0 hello 1 1 3 1 hello
DataFrame属性
dtype 查看数据类型 index 查看行序列或者索引 columns 查看各列的标签 values 查看数据框内的数据,也即不含表头索引的数据 describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据 transpose 转置,也可用T来操作 sort_index 排序,可按行或列index排序输出 sort_values 按数据值来排序
df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4']) print(df.dtypes) print(df.index) print(df.columns) print(df.values) # 查看类型 c1 float64 c2 float64 c3 float64 c4 float64 dtype: object # 查看索引项 DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06'], dtype='datetime64[ns]', freq='D') #查看列 Index(['c1', 'c2', 'c3', 'c4'], dtype='object') # 查看值 [[ 16.24345364 -6.11756414 -5.28171752 -10.72968622] [ 8.65407629 -23.01538697 17.44811764 -7.61206901] [ 3.19039096 -2.49370375 14.62107937 -20.60140709] [ -3.22417204 -3.84054355 11.33769442 -10.99891267] [ -1.72428208 -8.77858418 0.42213747 5.82815214] [-11.00619177 11.4472371 9.01590721 5.02494339]] 查看 每一列的极值,均值,中位数 print(df.describe()) c1 c2 c3 c4 count 6.000000 6.000000 6.000000 6.000000 mean 2.022213 -5.466424 7.927203 -6.514830 std 9.580084 11.107772 8.707171 10.227641 min -11.006192 -23.015387 -5.281718 -20.601407 25% -2.849200 -8.113329 2.570580 -10.931606 50% 0.733054 -4.979054 10.176801 -9.170878 75% 7.288155 -2.830414 13.800233 1.865690 max 16.243454 11.447237 17.448118 5.828152
DataFrame取值
print(df['c2']) # 按列取值 2019-01-01 -6.117564 2019-01-02 -23.015387 2019-01-03 -2.493704 2019-01-04 -3.840544 2019-01-05 -8.778584 2019-01-06 11.447237 Freq: D, Name: c2, dtype: float64
print(df[0:2]) #取第一行和第二行 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069
loc/iloc 自定义取值
print(df.loc['2019-01-01':'2019-01-03']) # 通过自定义的行标签选择数据 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407
print(df.iloc[2,1]) # 通过索引取值 == df.values[2,1] -2.493703754774101
print(df.iloc[1:4,1:4]) # 行:取第二行到第四行 ; 列:取第二列到第四列 c2 c3 c4 2019-01-02 -23.015387 17.448118 -7.612069 2019-01-03 -2.493704 14.621079 -20.601407 2019-01-04 -3.840544 11.337694 -10.998913
使用逻辑判断取值
print(df[df['c1']>0]) # df['c1']>0 取c1列里面大于0的值 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407
读取CSV文件
from io import StringIO import pandas as pd test_data = ''' 5.1,,1.4,0.2 4.9,3.0,1.4,0.2 4.7,3.2,,0.2 7.0,3.2,4.7,1.4 6.4,3.2,4.5,1.5 6.9,3.1,4.9, ,,, ''' test_data = StringIO(test_data) # 将数据写入内存 df = pd.read_csv(test_data) df.columns =['c1','c2','c3','c4'] print(df) c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 1 4.7 3.2 NaN 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5 4 6.9 3.1 4.9 NaN 5 NaN NaN NaN NaN
处理丢失数据
print(df.isnull()) print(df.isnull().sum()) # 通过isnull()方法后使用sum()方法即可获得该数据集某个特征含有多少个缺失值。 c1 c2 c3 c4 0 False False False False 1 False False True False 2 False False False False 3 False False False False 4 False False False True 5 True True True True c1 1 c2 1 c3 2 c4 2 dtype: int64
print(df.dropna(axis=0)) #axis=0会删除有Nan值的行 c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5
print(df.dropna(axis=1)) #axis=1会删除有Nan值的列 Empty DataFrame Columns: [] Index: [0, 1, 2, 3, 4, 5]
print(df.dropna(how='all')) #删除全为NaN值得行或列 c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 1 4.7 3.2 NaN 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5 4 6.9 3.1 4.9 NaN
来源:https://www.cnblogs.com/raynduan/p/11079172.html