一、Pandas认识pandas主要是用来进行数据处理/数据分析的第三方库,其中不仅包含了数据处理、甚至还有统计分析等相关计算,其内部封装了numpy的相关组件。 pandas的主要数据类型有:
二、创建DataFrame和Series1、加载数据import numpy as np# 加载数据res = np.load('某数据.npz')columns = res['columns']values = res['values']print('columns:\n',columns)print('values:\n',values) 2、数组转化为df结构将数组转化成 我们想要的 比较好看的行列结构
![]() 3、将df转化为Series结构(取df某一列)如何将df转化为Series,由于Series只有行索引,没有列索引,所以Series只是DataFrame取一列的特殊情况 ser = df['序号']print(ser)print(type(ser)) ![]() 根据行索引或行索引名称取出series中的行数据
![]() 4、使用字典生成一个df数据d = {'col1':[0,1,2],'col2':[1,2,3],'col3':[3,4,5]}df = pd.DataFrame(data=d,index=['a','b','c'])print(df)print(type(df)) ![]() 拿取多列数据,可以发现,数据类型还是df并不是series(series只能是拿取df的一列数据)
![]() 5、使用series方法自己生成一个series数据ser = pd.Series([1,2,3],index=['a','b','c'])print(ser)print(type(ser)) ![]() 三、DataFrame的属性1、手动创建一个df数据(每一列数据类型一致)
![]() 2、df的values属性(可用于数组和dataframe数据转化)# df的值,获取df数组print('df 的values:\n',df.values) ![]() 3、获取df行索引名称
![]() 4、获取df列索引名称# 获取列索引名称print('df 的columns:\n',df.columns) ![]() 5、获取df元素个数
6、获取df每一列的数据类型# 获取数据类型print('df 的dtypes:\n',df.dtypes) ![]() 7、获取df的形状
8、获取df维度# 获取维度print('df 的ndim:\n',df.ndim) 四、Pandas数据存储与读取1、加载文本数据(table方式)
2、加载文本数据(csv方式)info = pd.read_csv('xxxx.csv',encoding='ansi',usecols=['phone','name'])print(info)参数: header=infer 自动识别列名 自动认为第一行为列名 names 设置列名 接收array 默认为None index_col 设置行索引 如[0,1]是将第0列,第1列作为行索引 nrows 读取的时候读取前n行 usecols 指定读取的列 ['info_id','use_id'] ![]() 3、excel文件读取
![]() 4、保存数据(对象为df)有多种方式,这里只演示df.to_excel及pd.to_csv info = pd.to_excel('xxx.xlsx',columns=['detail_id','order_id'],index_label='index_id')print(info)参数: columns 指定需要保存的列 header 保存列索引 index 保存行索引 index_label 给保存好的excel文件的行索引起个名称 ![]() 五、df数据索引取值1、加载数据
2、普通索引获取单列数据pandas获取数据,都是先获取列,再获取行(非同时索引) 数组是同时索引(arr[行,列]) ![]()
3、普通索引获取多列数据![]() ![]()
4、loc iloc索引方式(同时索引)使用方法:detail.loc[行名称,列名称] or detail.iloc[行下标,列下标] ![]() ![]() 5、混合索引(ix)ix 混合索引,既可以使用名称也可以使用下标,索引方式同一维度(只能混合,不能混搭) 从效率上讲,ix最慢 如果数据过大不推荐使用 ![]() 六、df的修改操作1、加载数据![]() 2、定位sex=男的这一列数据,返回bool数组![]() 3、获取到所有sex=男的所有数据![]() 4、重新对获取到的这些数据进行赋值![]() ![]() 5、不加条件的修改(针对所有数据)![]() 简单修改数据: ![]() 七、df的增加操作1、加载数据![]() 2、增加一个列,并添加数据![]() ![]() 八、df的删除操作
1、加载数据![]() 2、删除列labels 指定列名,设置axis=1 ![]() 3、删除行labels 指定行名,设置axis=0(默认) ![]() 示例: ![]() 九、Pandas的统计分析1、读取数据![]() 2、统计函数![]() 3、pandas对于非数值型数据的统计分析![]() ![]() 示例1:在detail中哪些菜品最火?菜品卖出了多少份? ![]() ![]() 白饭不算菜,---把白饭删除,在统计 ![]() ![]() 示例2:在detail中哪个订单点的菜最多,点了多少份菜? ![]() ![]() 十、Pandas时间数据
1、通过pd.to_datetime 将时间点数据转化为pandas默认支持的时间点数据![]() ![]() 2、通过pd.to_datetime 或者 pd.DatetimeIndex将时间序列转化为pandas默认支持的时间序列结构![]() ![]() 示例: ![]() 获取该时间序列的属性---可以通过列表推导式来获取时间点的属性 ![]() ![]() 3、时间的相加减![]() 4、时间差距计算![]() 5、获取本机可以使用的初始时间和最后可以使用的时间节点![]() 十一、Pandas的分组聚合1、读取数据![]() 2、根据班级分组,统计学生的平均年龄![]() ![]() 3、先按照班级分组,在按照地址进行分组,求平均年龄![]() ![]() 4、按照单列进行分组,统计多个列的指标![]() ![]() 5、利用agg,同时对age求平均值,对USRE_ID求最大值![]() ![]() 6、同时对age和USER_ID同时分别求和及均值![]() ![]() 7、对age USER_ID 求取不同个数的统计指标![]() ![]() 8、自定义函数进行计算![]() ![]() 9、销售额计算(以每日分组计算每天的销售额)import pandas as pd# detail 有时间数据detail = pd.read_excel('meal_order_detail.xlsx')print('detail:\n',detail)print('detail的列索引名称:\n',detail.columns)print('detail的形状:\n',detail.shape)print('detail的列数据类型:\n',detail.dtypes)# 计算每个彩品的销售额,增加到detail中detail.loc[:,'pay'] = detail.loc[:,'counts'] * detail.loc[:,'amounts']print(detail)# 获取时间点的日属性# 必须pandas默认支持的时间序列类型detail.loc[:,'place_order_time'] = pd.to_datetime(detail.loc[:,'place_order_time'])# 以列表推导式获取日属性detail.loc[:,'day'] = [i.day for i in detail.loc[:,'place_order_time']]print(detail)# 以日分组res = detail.groupby(by='day')['pay'].sum()print(res) 十二、Pandas透视表与交叉表1、加载数据![]() 2、透视表创建
![]() ![]() 3、交叉表 mini版的透视表![]() ![]() ![]() 十三、Pandas数据去重与相关性衡量1、加载数据![]() 2、对指定数据去重参数: subset---指定要去重的数据 只有同列才能进行去重 ![]() 3、数据相关性衡量![]() ![]() 十四、DataFrame数据拼接1、加载数据![]() 2、concat方式基于行方向连接
![]() ![]()
![]() ![]() 3、concat方式基于列方向连接
![]() ![]()
![]() ![]() 4、merge方式连接
![]() ![]()
![]() ![]()
![]() ![]()
![]() ![]()
![]() ![]() 十五、DataFrame数据填充![]() ![]() 十六、缺失值处理1、缺失值检测![]() ![]() 2、删除法处理缺失值
![]() ![]() 3、填充法处理缺失值
![]() ![]() ![]() ![]() ![]() 4、插值法处理缺失值
线性插值: ![]() 多项式插值: ![]() 样条插值: ![]() 十七、异常值处理
箱线图异常处理:import pandas as pdimport numpy as np# 箱线图分析arr = pd.DataFrame(np.array([1,2,3,4,5,6,7,8,9,100]))print(arr.quantile(0.1))# 75% 的数 qu# 25% 的数 ql# iqr = qu - ql# 上限:qu + 1.5 * iqr# 下限:ql - 1.5 * iqrdef box_analysis(data): ''' 进行箱线图分析,剔除异常值 :param data: series :return: bool数组 ''' qu = data.quantile(0.75) ql = data.quantile(0.25) iqr = qu - ql # 上限 up = qu + 1.5 * iqr # 下限 low = ql - 1.5 * iqr # 进行比较运算 bool_id_1 = data <= up bool_id_2 = data >= low bool_num = bool_id_1 & bool_id_2 return bool_num# 加载数据detail = pd.read_excel('meal_order_detail.xlsx',sheetname=0)bool_num = box_analysis(detail.loc[:,'amounts'])detail = detail.loc[bool_num,:]print(detail.shape)# quantile 参数为[0,1]的小数---返回分位数,series类型# percentile 参数为[0,100]的整数---返回分位数的列表 十八、标准化数据标准化数据的目的:将数据转化为同一量级,避免量级对结果产生不利的影响,消除量高影响 三种方式: 1、离差标准化---(x - min)/(max - min)
2、标准差标准化---(x - mean)/std# 转化完成的数据---将数据转化到标准差为1,均值为0的一种状态def stand_sca(data): ''' 标准差标准化数据 :param data: 传入的数据 :return: 标准化之后的数据 ''' data = (data - data.mean()) / data.std() return data# 对异常值不敏感(出场率--使用比较高) 3、小数定标标准化---x/10^k
4、三种标准化数据函数应用# 加载数据detail = pd.read_excel('meal_order_detail.xlsx')# print(detail)print(detail.loc[:,'amounts'].max())print(detail.loc[:,'amounts'].min())# 标准化数据# 离差标准化(基本不用)res = min_max_sca(detail.loc[:,'amounts'])# 标准差标准化res = stand_sca(detail.loc[:,'amounts'])# 小数定标标准化res = desc_sca(detail.loc[:,'amounts'])print(res) 十九、数据离散化1、将类别型数据 转化为 哑变量矩阵数据分析模型中有相当一部分的算法模型都要求输入的特征为数值型,但实际数据中特征的类型不一定只有数值型,还会存在相当一部分的类别型,这部分的特征需要经过哑变量处理才可以放入模型之中。 类别型数据转化为数据值数据 ![]() ![]() 2、将连续型数据进行离散化---进行分组,将具体的值转化为区间数据![]() ![]() 等宽分组(可以发现等宽分组时分布不均)![]() ![]() 等频分组(等频分组数据分组比较均匀)![]() ![]() ![]() 将连续型数据再次转化为哑变量矩阵
![]() |
|