轴: (层,行,列) (0,1,2)
所有数学和统计函数都有此参数 axis=0 行 axis=1列, -------思路相反-----------> np.sum(data,axis=0求每列和)
shape 获取维度(行,列,层)
ndim 获取维度数
size 获取元素数
dtype 元素数据类型
公共参数: dtype=“type” (float/float32/ini/int32/bool)
数据类型:bool/byte/short/uint/ double/ 通过dtype=np.类型
将python类型转换ndarray np.array(dict/list])
numpy创建 1-D ndarray np.arange(start,end,step)
numpy创建 2-D ndarray np.eye(行,列) 行索引==列索引的元素为1,其余为0
常规矩阵
全0 np.zeros((行,列))
全1 np.ones((行,列))
形状相同(全1) data = np.ones_like(数组)
形状相同(全0) data = np.zeros_like(数组)
指定值 np.full((行,列),数值)
形状相同+特定值 np.full_like(数组,数值)
等差数列 np.linspace(开始,结束,个数)
5.矩阵复制(深拷)创建 ndarray: data.copy() data[1:3].copy()
从磁盘读取矩阵 np.save(“file.npy”,data) np.load(“file.npy”)
随机生成 random
rand均匀分布([0,1],中心在值中心) randn标准正态分布(均值0,方差1,中心在0)
random.randn(n) n个随机数
random.randn(行,列) 指定行列随机数
random.randn(层,行,列) 指定层 行列随机数
randint(x,y,size=(层,行,列)) 随机整数
random(size=(层,行,列)) 随机生成数[0.0,1.0]
choice(数组,size=(层,行,列)) 随机取数
shuffle(数组) 随机排列(多维数组随机排列只按行随机,列是不变的)
normal(平均值,方差,size=(层,行,列)) 按照平均值和方差生成高斯分布/正态分布/常态分布的数字
uniform(x,y,size=(层,行,列)) 在[x,y) 之间生成均匀分布的数字
保留位数(四舍五入) np.round(数值,位数)
data.shape 获取结构
单元素索引 data[index]
切片 data[start:stop:step]
整数数组索引 data[[1,2,3,4]] 只取索引行
布尔数组索引 data[[True,False,True,True]] 只取真 (可以使用运算符)
布尔数组: data > 2
取行 data[index]
行列 data[0:2,2:3]
整数 data[[1,2],[0,3]]
布尔 data[[False,True],[True,True]]
data[1] = 2 data[0:2]=3 data[0:2,1:3] = 4
行列变形: data.reshape(行,列) 注意 —> 行*列 == 数组.size()
展平(多维变一维): data.flatten()
组合:
连接 np.concatenate((data1,data2),axis=“”)
水平堆叠 np.vstack(data1.data2)
垂直堆叠 np.hstack(data1,data2)
三维堆叠 np.dstack(data1,data2)
垂直拆分: np.hsplit(data,拆分块数)
按值大小排序: np.sort(data,axis=轴,kind=‘排序算法’,order=“排序字段”)
参数 | 描述 |
---|---|
axis | 排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认值为-1,表示沿着最后的轴排序 |
kind | 排序的算法,提供了快排(默认)‘quicksort’,混排’mergesort’,堆排’heapsort’ |
order | 排序的字段名,可按指定字段排序,默认为None |
# sort() 无参数则按最后一个轴进行排序
data = np.array([3,4,1,2,3,5,6,7,8])
data.sort() # 0轴行排序
data = np.array([[0,12,48],[4,18,14],[7,1,99]])
data.sort(data,axis=0) #0轴行排序
获取排序后下标: 数组.argsort(data,axis=轴,kind='排序算法',order="排序字段")
根据键值的字典进行排序 : lexsort
轴: (层,行,列) (0,1,2)
沿着0轴切2行 data[:2]
沿着0轴切2行,沿着1轴切1列 data[:2,1:]
行列转置 data.transpose() / data.T
轴转置 data.swapaxes(1,0)
反转矩阵 np.flip(array,axis=“”)
浅拷贝
a=b 不能这样赋值,因为a和b相互影响,在内存里a变了b也会发生变化
a=b[:] 视图操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的
深拷贝
a=b.copy() 复制,a和b互不影响,相当于是重新开辟了一个空间保存b的值,然后让a指向b.copy()
data = np.array([[1,3,6],[9,3,2],[1,4,3]])
np.where(data>3,520,1314) # 大于3为520,否则1314
data = np.array([False,False,True,False])
data.any() # 检查数组中是否至少有一个True
data.all() # 检查是否每个值都是True
一对多的影响
四则运算时 (* / + -): data * 1 矩阵所有乘1
data1 + data2 形状相同,对应元素计算(行/列相同的一维可以和二维一起计算)
广播规则: 1.形状相同/形状不同,但轴长相同/ 最后一个都轴一致
2.最后一个轴是1
(4,3) <-----可广播----> (3,) 4行3列对1行3列,有一轴长一致,即可广播
(2,4,3) <----可广播-----> (4,3) 行列一致,可广播
(2,4,3) <----可广播—> (3) 列一致,可广播
一元函数 (数组) axis | |
---|---|
abs,fabs | 计算整数,浮点数或复数的绝对值,对于非复数,可以使用更快的fabs |
sqrt | 计算各个元素的平方根,相当于arr**0.5,要求arr每个元素必须是非负数 |
square | 计算各个元素的评分,相当于arr**2 |
exp | 计算各个元素的指数e的x次方 |
log,log10,lg2,log1p | 分别计算自然对数,底数为10的log,底数为2的log,以及log(1+x),要求arr每个元素必须正数 |
sign | 计算各个元素的正负号:1正数,0零,-1负数 |
ceil | 计算各个元素的ceiling值,即大于等于该值的最小整数 |
floor | 计算各个元素的floor值,即小于等于该值的最大整数 |
rint | 将各个元素值四舍五入到最接近的整数,保留dtype的类型 |
modf | 将数组中元素的小数位和整数位以两部分独立数组的形式返回 |
isnan | 返回一个表示"那些值是NaN(不是一个数字)"的布尔类型数组 |
isfinite,isinf | 分别表示"那些元素是有穷的(非inf,非nan) “或"那些元素是无穷的布尔型数组” |
cos,cosh,sin,sinh,tan,tanh | 普通以及双曲线型三角函数 |
arccos / arccosh, arcsin / arcsinh, arctan / arctanh | 反三角函数 |
二元函数 (数组,数组) axis | |
---|---|
mod | 元素级的求模计算(除法求余) |
dot | 求两个数组的点积 |
greater,greater_equal / less,less_equal / equal , not_equal | 执行元素级别的比较运算,最终返回一个布尔型数组 |
logical_and, logical_or,logical_xor | 执行元素级别的布尔逻辑运算,相当于(& | ^) |
power | 求解对数组中每个元素进行给定次数的指数值,类似于: arr**x |
方法 (data,axis=“”) axis=0每列计算 axis=1每行计算 | 描述 |
---|---|
sum | 沿着轴向,计算所有元素的累加和,0长度的数组累加和为0 |
average | 加权平均,参数可以指定weights |
prod | 所有元素的乘积 |
mean | 数学平均,0 长度的数组平均值为NaN |
std,var | 标准差和方差,可以自由度调整(默认分母是n) |
.cov() | 相关系数矩阵 |
min.max | 最小和最大值 |
argmin,argmax | 最小和最大值的位置 |
cumsum | 从0开始元素累积和 |
cumprod | 从1开始元素累积积 |
median | 中位数 |
prercentile | 0-100百分位数 |
quantile | 0-1分位数 |
argmax(np.bincount(arr)) | 众数 (适用于一维,元素不能为浮点) 建议使用Pandas mode()方法 |
概念
1、平均数:所有数加在一起求平均
2、中位数:对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的
两个数值的平均数作为中位数
3、众数:出现次数最多的那个数
4、加权平均数:**加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。加权平均值的大小不仅取决于
总体中各单位的数值(变量值)的大小,而且取决于各数值出现的次数(频数),由于各数值出现的次数对其在平均数中的影响起着权衡
轻重的作用,因此叫做权数。 因为加权平均值是根据权数的不同进行的平均数的计算,所以又叫加权平均数。在日常生活中,人们常常
把“权数”理解为事物所占的“权重” x占a% y占b% z占c% n占m%
加权平均数=(ax+by+cz+mn)/(x+y+z+n)
5.轴: (层,行,列) (0,1,2)
所有数学和统计函数都有此参数 axis=0 行 axis=1列, -------思路相反-----------> np.sum(data,axis=0求每列和)
其中思路正好是反的:axis=0 求每列的和。axis=1求每行的和。
行:每行对应一个样本数据
列:每列代表样本的一个特征
数组对应到现实中的一种解释:
对于机器学习、神经网络来说,不同列的量钢是相同的,收敛更快。
有两个特征,一个是商品单价1元至50元,另一个是销售数量3千个至1万个,这两个数字不可比,所以需要都做标准化。
比如在Excel里,单价一个列,销售数量一个列,不同列代表不同特征,所以用axis=0做计算
标准化一般使用:通过均值和方差实现
数组 = (数组 - mean(数组,axis=0))/ std(数组, axis=0)
方法 | 描述 |
---|---|
unique(x) | 计算x的唯一值(去重),并排序 |
intersect1d(x,y) | 计算x和y的交集,并排序 |
union1d(x,y) | 计算x和y的并集,并排序 |
inid(x,y) | 计算x中的元素是否包含在y中<返回一个布尔数组 |
setdiff1d(x,y) | 差集,在x中但不在y中的x元素 |
setor1d(x,y) | 亦或集,在x或y中,但不属于x,y交集的元素 |
5.去重
(展平 )获取唯一元素列表:np.unique(data)
获取唯一元索引列表:np.unique(data,return_index=True)
(去重行/列) np.unique(data,axis=“”)
类型 | 读 | 写 |
---|---|---|
.csv/.tsc/.txt | read_csv(路径,seq=“分隔符”,header=“表头”,index_col=False,encoding=“”,skiprows=跳过行数,nrows=读取行数) | to_csv(路径,seq=“分隔符”,header=“表头”,index=False,encoding=“”) |
.xlsx | read_execl(路径,sheet_name=“工作表名”,skiprows=跳过行数,nrows=读取行数) | to_execl(路径,sheet_name=“工作表名”,index=True) |
.json | read_json() | to_json() |
.sql | read_sql(“sql语句”,con=“连接对象”) | to_sql(表名,连接对象) |
data.dtype 查看数据结构
Series 系列 “一维数据”
系列可以保存任何数据类型,轴标签为索引(可以是ndarray,dict,标量值. 长度需与数据长度一致)
创建 data = pd.Series(d,index=index)
切片 ndarray —> data[0] data[0:1]行切片 data[[0,1,2]] 取指定行
dict ----> data[“key”]
常用方法
数据.index #查看索引
数据.values #查看数值
数据.isnull() #查看为空的,返回布尔型
数据.notnull()
数据.sort_index() #按索引排序
数据.sort_values() #按数值排序
DataFrame 数据帧 “多维数据”
数据帧是一种二维数据结构,其列不同的类型(一维数组,列表,字典,series,dataframe,ndarray,结构化数据)
创建: data = pd.DataFrame(d,index=index,colums=colums)
选择: data[“colums”] / data.iloc[''colums] (series)
添加: data[‘newcolums’] = data[‘colums’]
删除: data.pop[“colums”]
切片: data[0:1] 行切片 / data.iloc[0:1,0:1] 行列切片 (dataframe)
转置: data.transpose() / data.T
常用方法
数据.head( 5 ) #查看前5行
数据.tail( 3 ) #查看后3行
数据.values #查看数值
数据shape #查看行数、列数
数据.fillna(0) #将空值填充0
数据.replace( 1, -1) #将1替换成-1
数据.isnull() #查找数据中出现的空值
数据.notnull() #非空值
数据.dropna() #删除空值
数据.unique() #查看唯一值
数据.reset_index() #修改、删除,原有索引,详见例1
数据.columns #查看数据的列名
数据.index #查看索引
数据.sort_index() #索引排序
数据.sort_values() #值排序
pd.merge(数据1,数据1) #合并
pd.concat([数据1,数据2]) #合并
pd.pivot_table( 数据 ) #用df做数据透视表
首尾数据 head(n) tail(n)
随机抽 sample(n)
数据结构 shape
查看信息 info()
查看列名列表 columns
查看索引列 index
查看数据 values
数据统计摘要 describe()
最值索引 idxmin() idxmax()
查看数据类型 dtypes
显示数据行和列名 axes
显示列中不重复值 team.unique()
查看列数据 data[“列名”]
整数索引 .iloc(整数,列表,切片,布尔数组)
标签索引 .loc([行索引],[列名称])
布尔索引(用于筛选数据):
每个表达式必须用括号分组,运算符(| or & and ~ not > < == !=)
data[data[“colums”]>0]
data[(data[“colums”]>0) | (data[‘colums’]<100)]
1.数据筛选
每个表达式必须用()包裹
表达式: data[data[‘colums’]>0]
where()方法: data[data[“colums”]>0] = data.where(data[“colums”]> 0) 支持运算符
query()方法 data[data[“colums”]>0] = data.query(“colums >0”) 支持运算符
2.文本筛选
startwith() | 筛选开头 |
endwith() | 筛选结尾 |
contains() | 包含 |
truncate(before/after=“日期”) | 筛选指定日期之前/后 |
data.astype(‘python类型’) int/float/double/str
方法(data,dtype=“numpy类型”)
连接: pd.concat([data1,data2],axis=“”,index=“”,join=“”,sort=“”) 相同字段首尾相连
合并 (dataframe/series): pd.merge(data1,data2,on=“列名”,how=“合并方法”)
合并方法 | 描述 |
---|---|
left |
仅使用左框架中的键 |
right |
仅使用右帧中的键 |
outer 全连接 |
使用两个帧中的键并集 |
inner 内连接(默认) |
使用两个帧中键的交集 |
# 基于一个字段 pd.merge(data1,data2,on="列名",how="合并方法")
# 基于多个字段 pd.merge(data1,data2,on=["列名","列名"],how="合并方法")
# 注意可以使用 join data1.join(data2,on="",how="")
追加
df1.append(df2, axis=“”,ignore_index=True) 相同字段首尾相连,无效字段数据为NaN
删除数据
行 drop(labels=[行号],axios=0,)
列 drop(labels=[列名],axios=1,)
unique() 返回唯一值列表
提取重复 duplicated
返回一个布尔向量,其长度是行数,指示行是否重复。True为重复
删除重复 drop_duplicates(subset=["列名"],keep='first/last/False')
删除重复的行
参数
(数据,axis="",ascending="",inplace="")
ascending=True/False 升/降
inplace=True 直接对数据进行排序(不返回新对象) / 返回新对象
单列: data.sort_values(by="",assending=True,inplace=True)
多列: data.sort_values(by=["",""],assending=["",""],inplace=True)
按索引排序 sort_index()
按列值排序 sort_values(by=[“列”])
按索引和值排序 sort_values(by=[“索引”,“列”])
copy()
行列转换: data.transpose() / data.T
常规替换 data[“”] = x
数值替换 data.replace(‘旧字符’,‘新字符’,inplace=True)
替换指定的某个或多个数值
data.replace({‘列元素’:‘’,‘列元素’:‘’},inplace=True)
data.replace([‘‘列元素,‘列元素’],[’’,‘’],inplace=True)
替换某个数据部分内容 data[“列”] = data[“列”].str.replace(“”,“”)
字符串操作
data.str | |
---|---|
.replace(“”,“”) | 字符替换 |
.astype(‘type’) | 类型转换 |
.cat(data2,sep=‘分隔符’) | 字符拼接 |
.split(‘’,n=-1全部/指定次数) | 字符切割 |
.partition(‘字符’) | 字符切割一次 |
.get(index) | 获取指定位置字符(只取一个) |
.slice(开始,结束,步长) | 获取指定范围的字 (字符串切片) |
.slice_replace(开始,结束,替换字符串) | 切片后替换 |
.join(‘字符’) | 字符联结 |
.contains(‘字符’) | 判断字符串是否包含指定字符(返回布尔) |
.startswith(‘字符’) | 是否某个字符开头 |
.endswith(‘字符’) | 是否某个字符结尾 |
.repeat(重复次数) | 重复字符串 |
.pad(占位长度,fillchar=‘字符’,side=“right/left/both”) | 将每个元素额外填充一个字符 |
.zfill(占位数量) | 每个元素额外填充 ‘0’ (从左边) |
.encode(‘’) | 字符编码 |
.decode(‘’) | 字符解码 |
.strip() | 去除两边指定字符 |
.translate({‘旧字符’:‘新字符’}) | 指定部分替换 |
.find(‘字符’) | 查找指定字符第一次出现的位置 |
.lowewr() | 所有字符小写 |
.upper() | 所有字符大写 |
.title() | 第一个单词首字母大写 |
.capitalize() | 首字母大写 |
.swapcase() | 大小写转换 |
.isalpha() | 判断是否全字母 |
.isnumeric() | 判断是否全数字 |
.isalnum() | 判断是否全字母或数字 |
.isspace() | 判断是否全空格 |
.islower() | 判断是否全小写 |
.istitle() | 判断每个单词的首字母是否大写(其他字母小写) |
.match() | 正则模式匹配 |
.extract() | 分组捕获 |
参数(series,axis=轴)
数据统计摘要 describe()
count(data[‘’].unique()) | 去重元素数量 |
---|---|
count / len |
非空值数量 |
sum |
求和 |
mean |
求平均值 |
mad | 平均绝对方差 |
median |
中位数 |
min |
最小值 |
max |
最大值 |
mode |
众数 |
abs |
绝对值 |
prod |
乘积,连乘 |
std |
标准差 |
var |
方差 |
sem |
均值的标准误差 |
skew |
样本偏度(第 3 矩) 偏度系数 |
kurt |
样本峰度(第4矩) |
quantile |
样本分位数(以 % 为单位的值) |
cumsum |
累计连加再加 |
cumprod |
累计连乘再乘 |
cummax |
累计最大值 |
cummin |
累积最小值 |
argmin | 最小值索引位置(整数) |
argmax | 最大值索引位置(整数) |
idxmin | 每列最小值索引 |
idxmax | 每列最大值索引 |
cov() | 协方差 |
corr() | 相关系数 |
rank() | 排名 |
pct_change() | 时间序列变化 |
nunique() | 去重数量,不同值的量 |
rolling(距离).窗口函数()
窗口函数 | |
---|---|
count() | 非空个数 |
sum() | 求和 |
mean() | 求平均 |
max() / min() | 最大最小 |
rank() | 排名 |
median() | 中位数 |
var() | 方差 |
std() | 标准差 |
是缺失(返回布尔数组) data.isnull()
不是缺失(返回布尔数组) data.notnull()
data.dropna(axis=“”,how=‘’,thresh=None,subset=[],inplace=False)
axios设置删除包含缺失值的轴
how(与axis配合使用): any只要缺失值出现就删除该行该列 all所有的值都缺失,才删除行或列
thresh: axis中至少有个thresh个非缺失值,否则删除
subset: 在哪些列中查看
(0/平均值/中值/其他)
data.fillna(value=“填充值”,method=None,axis=None) 可以直接写fillna(填充值)
method 填充方式 | 若变轴,则左右就是前后 |
ffill | 用前面的值填充 |
bfill | 用后面的值填充 |
pad | 向后填充 |
backfill | 向前填充 |
limit 限制填充数量 |
拆分成组: data.groupby(“分组字段”,axis=“”)
按组排序: data.groupby(“分组字段”,axis=“”,sort=False).统计函数()
组内应用多个函数: data.groupby(“分组字段”,axis=“”).agg([“函数名”,“函数名”])
将不同的函数应用于不同列: data.groupby(“分组字段”,axis=“”).agg({“列名”:“函数名”,“列名”:“函数名”})
按组过滤: data.groupby(“分组字段”,axis=“”).filter(自定义函数)
按组应用(高级函数): data.groupby(“分组字段”,axis=“”).apply(自定义函数)
多列单方法: data.groupby([‘分组字段’,‘分组字段’])[‘聚合字段’].sum()
多列多方法: data.groupby(([‘分组字段’,‘分组字段’])).agg({‘聚合字段’:聚合方法,‘聚合字段’:聚合方法})
agg函数基于列聚合 : data.agg(fun,axis=“”,参数)
groupby基于行聚合
对没对齐的数据进行补空填充,来对齐数据
data[‘x’].fillna(0) + data[‘y’].fillna(0)
空值与数字进行计算结果为空值,
1/0=inf 无穷大 -1/0负无穷大 0/0=Nan
data[‘x’].add(data[y],fill_value=0)
方法 | 反转方法 | 描述 |
---|---|---|
add | radd | 加法 |
sub | rsub | 减法 |
div | rdiv | 除法 |
floordiv | rfloordiv | 整除 |
mul | rmul | 乘法 |
pow | rpow | 幂次方 |
pipe()
apply()
agg(
) 和 transform()
applymap()
对数据进行逐行,逐列,逐元素的操作
map(): 把数据逐个传入字典或函数中(参数少)
# 对指定列元素进行替换
1.data['列'] = data['列'].map({'原元素':'新元素'})
def fun(x):
if x =='原元素':
return '新元素'
2.data['列'] = data['列'].map(fun)
apply(): 与map功能一致,但是(参数多)
def fun(x,args): //第一个是默认逐个传入的参数 第二个是args传入的参数
if x =='原元素':
return '新元素' + args
2.data['列'] = data['列'].apply(fun,args=(1,),axis="")
axis=0 对每列 1对每行
applymap(): 对每个单元格进行函数操作
直观的显示要分组聚合统计的数据结果
矩阵 data.pivot(index=“索引列”,colums=“行”,values=“透视列”)
表 pd.pivot_table(data,index=[“索引列”],columns=[“行”],values=[“透视列”],aggfunc=[np.统计函数])