Python NumPy与Pandas库用法详解:学习笔记
#参考于:10小时学会Python数据分析、挖掘、清洗、可视化从入门到项目实战 1 01 第一周重点内容梳理_哔哩哔哩_bilibili
# numpy # 构造 # 1.强制转化:str>float>int # 2.形成一个数组:np.array([]) # 3.快速填充数组:np.ones(shape),其中shape是方法,形成一个高阶数组,同样的还有np.zero(), np.full(fill_value)可指定任意的数来填充它 # 4.生成单位矩阵:np.eye() # 5.等差数列:np.linespace(start=,stop=,num=) ,np.arrange(start=,stop=,num=,dtype=None) # 6.生成随机数:np.random.randint():生成随机整数;np.random.random():生成随机小数;np.random.randn():生成随机正态分布数;np.random.normal():生成随机正常正态分布数;np.random.permutation():生成随机索引数; # 访问 # 1.arr[index1,index2,index3...indexn] # 2.元素:arr[index,column] # 3.行:arr[index] # 4.列:arr[:,column] # 5.切片:arr[row1:row2,column1:column2] # 使用列表访问:可以把任意的index替换成列表 # 使用BOOL列表访问:可以把任意的index替换成BOOL列表 # 属性 # 1.arr.shape: 类型 arr.ndim: 维度 arr.size: 大小 arr.dtype: 类型 # 运算 # 1.聚合运算:sum():求和,mean():平均数,std():平方根,np.meidan():中位数 # 2.np.nansum():可忽略nan值进行求和 # 3.使用axis来进行控制轴的方向,arr.sum(axis=1) # 4.广播运算:两个集合要进行运算要求它们的形状要求一致,而广播就能够保证其运算的正常运行,处理形状的特性 # pandas 的两个数据类型 # 【1】Series:类字典的,一维的数组对象,可读性更高 # 构造:Series(data,index),Series(data=dict) # 属性:s.shape,s.size,s.dtype,s.index,s.values # 访问:兼容numpy的数组访问方式,兼容字典的访问方式。s.loc[显示索引,列表],s.iloc[隐式索引,列表] 注意:标签的切片是闭区间,索引的切片是开区间 # 运算:Series+num 广播 Series+Series 索引对齐,如果索引不对齐,会补空 Series+numpy.array 转换成相同的numpy.array再运算 # 常用方法:s.head(),s.tail():查看开头的5个元素和结尾的5个元素,本质是一个切片函数,但是一般用于查看结构,主要运用于DataFrame对象中 # s.sort_values(ascending):根据值排序 # s.sort_index():根据索引排序 # s.value_counts():统计列表中相同数据出现的次数 # s.unique():去重操作 # s.map():映射函数,可以接收dict,function,lamba,比如百分之成绩映射到五分制成绩 # 【2】DataFrame:是Series的容器,是一个字典对象(key:列标签,value:每一列的数据) # 构造:DataFrame(data,index,columns),DataFrame(data={'name':[],'age':[]}) # 读取数据:pd.read_csv(), pd.read_excel(), pd.read_table() # 属性:df.dtypes:获取每一列数据类型;df,index:获取行索引,是pd.Index()类型 # df.columns:获取列索引,是pd.Index()类型 ;df.value:获取值(numpy.array类型) # df.shape ,df.size # 常用方法:df.info():查看数据字段,字段类型,字段值的个数 # df.head(),df.tail() # df.describe():查看常规的统计指标:count,mean,min,max,Q1,Q2,Q3 # df.dtypes:查看数据类型 # df.isnull:检测空值 # 访问:df.loc[row,column] 通用的访问方式 # 访问:df.iloc[row_index,col_index] 通用的隐式访问方式 # 元素访问:df.loc[rowname,colmane] # 行访问:df.loc[rowname] # 列访问:df.loc[:,colname] # 列访问的特殊形式:把DataFrame当成字典来访问:df[colname] # 行访问的特殊形式:df[rowname1:rowname2] # 运算:DataFrame+num # DataFrame+Series # DataFrame+DataFrame # 其他情况一概处理成numpy.array,采用广播,但是不考虑索引 # 聚合运算: # 1.不考虑空值 # 2.默认列方向的聚合 # 常规的聚合函数:sum,mean,std # 特殊的聚合函数:any,all # 多层级的pandas对象 # 多层级索引的构造:pd.MultiIndex.from_product([A,B],[1,2,3]) # 访问方式:df.loc[index,column] # 多层级的索引使用元组来表示:(level1_name,level2_name) # pandas的常见业务处理 # 【1】空值的处理 # 查找空值:df.isnull().any(axis=0) 查找列方向是否存在空值 df.isnull().any(axis=1) 查找行方向是否存在空值 # 填充空值:df.fillna(value,method,axis) # 用相同的值来填充所有的空值: value=‘待定’ # 用相邻值来填充空值:method,axis # 用聚合指标来填充空值:df.fillna(value=df.mean()) # 过滤空值:df.dropna(axis,how) # 使用BOOL列表过滤,找到符合的行或列的BOOL列表的表示 # eg:过滤包括空值的行 df.loc[df.isnull().any(axis=1)] # 空值的说明:None Noneobject # np.nan float 表示形式是NaN,NaN并不是个数 # pandas对象会自动把None处理np.nan # 【2】重复值的处理 # 查找重复值:df.duplicated(keep,subset) # 删除重复值:df.drop_duplicates() # 更灵活地删除函数:drop(by,axis) by:标签 axis:轴的方向 # eg:删除任意科不及格的成绩:drop(df.loc[(df<60).any(axis=1)].index) # 【3】异常值的处理 # drop函数 # 认定条件:三倍标准差:np.abs(df)>3*np.std(df) 离群值(Q1,Q3,IQR) # 【4】分组处理 # group_obj = df.groupby('分组的列标签\列表') # group_obj.groups 查看分组情况 # group_obj.agg({'age':mean,'python':max}) 聚合函数 # 透视表:pd.pivot_table(data,index,columns,values,agg) 查看两个字段的交叉关系 # 交叉表:pd.crosss_table(index,columns,value,agg) 统计两个字段的对应关系的频数 # 【5】汇总处理 # 级联:相同业务表汇总 # pd.concat(objs,axis,join,ignore_index,keys) # join,inner,outer:考虑的是多个级联的表格的标签的交集,并集 # 合并:不同业务表汇总 # 1.合并是参考列的,和行没有关系 # 2.合并的列在内容上必须一对一,一对多或多对多关系中的一种 # 3.选择合并列的时候尽量选择离散性数据,避免数值型数据 # merge(left,right,how,on,left_on,right_on,left_index,right_index,suffiexes) # how:left,right,inner,outer 参考的是列的内容,跟标签没关系 # left_index,right_index 把一个表的行索引作为和并项时使用 # on+suffiexes: 有多个相同列标签的合并 # left_on,right_on 合并的列名称不一样时使用 # pandas的其他操作 # 映射处理: # replace(to_replace,value,method,limit,regex=True) to_replace:number,str,list,dict,regex # rename(index,columns,mapper,level,axis) # map() 是Series的方法,不是DataFrame的
作者:2301_80421078