小象学院_Python数据分析_第三讲_Pandas

来源:互联网 发布:android 应用启动优化 编辑:程序博客网 时间:2024/05/16 14:43

Pandas 基础

Pandas 的数据结构

  • Series
    • 类似一维数组的对象
    • 通过list构建Series: ser_obj = pd.Series(range(10))
    • 由数据和索引组成
      • 索引在左,数据在右
      • 索引是自动创建的
    • 获取数据和索引:ser_obj.index, ser_obj.values
    • 预览数据: ser_obj.head(n)
    • 通过索引获取数据:ser_obj[idx]
    • 索引与数据的对应关系仍保持在数组运算的结果中
    • 通过dict构建Series
    • name属性: ser_obj.name = "temp", ser_obj.index.name = "temp2"
  • DataFrame
    • 类似多维数组/表格数据(如,Excel,R 中的data.frame)
    • 每列数据可以是不同的类型
    • 索引包括列索引和行索引
    • 通过ndarray构建DataFrame
    • 通过dict构建DataFrame
    • 通过列索引获取列数据(Series类型)
      • df_obj[col_idx] 或 df_obj.col_idx
    • 增加列数据,类似dict添加key-value
      • df_obj[new_col_idx] = data
    • 删除列 : del df_obj[col_idx]
  • 索引对象Index
    • Series和DataFrame中的索引都是Index对象
    • 不可变(immutable)
      • 保证了数据的安全
    • 常见的Index种类
      • Index
      • Int64Index
      • MultiIndex, “层级”索引
      • DatatimeIndex, 时间戳类型

Pandas 的数据操作

  • 索引操作
    • Series索引
      • 行索引, ser_obj[‘label’] , ser_obj[pos]
      • 切片索引, ser_obj[2:4](不包括最后一个), ser_obj[‘label1’:’label3’](包括最后一个)
      • 不连续索引, ser_obj[[‘label1’,’label2’, ‘label3’]],ser_obj[[0,2,4]]
      • 布尔索引
    • DataFrame索引
      • df_obj.columns, df_obj.index
      • 列索引 df_obj[‘label’]
      • 不连续索引df_obj[[‘label1’, ‘label2’]]
  • 索引操作总结
    • Pandas的索引可归纳为3种
    • .loc, 标签索引
    • .iloc, 位置索引
    • .ix, 标签与位置混合索引
      • 先按标签索引尝试操作,然后按位置索引尝试操作
    • 注意
      • DataFrame索引时可将其看作ndarray操作
      • 标签的切片索引时包含末尾位置的
  • 运算与对齐
    • 按索引对齐运算,没对齐的位置补NaN
      • Series 按行索引对齐
      • DataFrame 按行,列索引对齐
    • 填充未对齐的数据进行运算
      • 使用add, sub, div, mul
      • 同时通过fill_value指定填充值
    • 填充NaN:fillna
  • 函数应用
    • 可直接使用NumPy的ufunc函数,如abs等
    • 通过apply将函数应用到行或列上
      • 注意指定轴的方向,默认axis = 0
    • 通过applymap将函数应用到每个数据上
  • 排序
    • sort_index , 索引排序
      • 对DataFrame操作时注意轴方向
    • 按值排序:
      • sort_values(by = ‘label’)
  • 处理缺失数据
    • 判断是否存在缺失值
      • ser_obj.isnull(), df_obj.isnull()
    • dropna
      • 丢弃缺失数据
    • fillna:填充缺失数据

Pandas 统计计算和描述

  • 常用的统计计算
    • sum, mean, max, min…
    • axis = 0按列统计, axis = 1 按行统计
    • skipna 排除缺失值, 默认为True
    • idmax, idmin, cumsum
      • 统计描述
      • describe产生多个统计数据

Pandas 进阶

数据的分组与聚合

  • 层级索引(hierarchical indexing)
    • Multilndex对象
    • 选取子集
      • 外层选取 ser_obj[‘outer_label’]
      • 内层选取 ser_obj[:, ‘inner_label’]
    • 常用于分组操作、透视表的生成等
    • 交换分层顺序:swaplevel()
    • 排序分层sortlevel()
  • 分组(groupby)
    • 对数据集进行分组,然后对每组进行统计分析
    • SQL能够对数据进行过滤,分组聚合
    • pandas能够利用groupby进行更加复杂的分组运算
    • 分组运算过程
      • split -> apply -> combine
      • 拆分:进行分组的根据
      • 应用:每个分组运行的计算规则
      • 合并:把每个分组的计算结果合并起来
    • GroupBy对象:DataFrameGroupBy, SeriesGroupBy
    • GroupBy对象没有进行实际运算,只是包含分组的中间数据
    • 对GroupBy对象进行分组运算/多重分组运算,如mean()
      • 非数值数据不进行分组运算
    • size()返回每个分组的元素个数
    • 按列名分组: obj.groupby(‘label’)
    • 按列名多层分组: obj.groupby([‘label1’, ‘label2’])->多层dataframe
    • 按自定义的key分组
      • obj.groupby(self_def_key)
      • 自定义的key可为列表或多层列表
    • unstack可以将多层索引的结果转换成单层的dataframe
    • GroupBy对象支持迭代操作
      • 每次迭代返回一个元组(group_name, group_data)
      • 可用于分组数据的具体运算
    • GroupBy对象可以转换成列表或字典
    • Pandas也支持按列分组
    • 其他分组方法
      • 通过字典分组
      • 通过函数分组,函数传入的参数为行索引或列索引
      • 通过索引级别分组
  • 聚合(aggregation)
    • 数组产生标量的过程,如mean(), count()等
    • 常用于对分组后的数据进行计算
    • 内置的聚合函数
      • sum(), mean(), max(), min(), count(), size(), describe()
    • 可自定义函数,传入agg方法中
      • grouped.agg(func)
      • func的参数为groupby索引对应的记录
    • 应用多个聚合函数
      • 同时应用多个函数进行聚合操作,使用函数列表
      • 对不同的列分别作用不同的聚合函数,使用dict
  • 分组运算
    • 原因:
      • 聚合运算改变了原始数据的shape
      • 如何保持原始数据的shape?
        • 使用merge的外连接,比较复杂
        • transform
      • transform的计算结果和原始数据的shape保持一致
        • 如:grouped.transform(np.mean)
        • 也可以传入自定义函数
      • grjouped.apply(func)
        • func函数在各分组上调用,然后结果通过pd.concat组装到一起
        • 产生层级索引
          • 外层索引是分组名
          • 内层索引是df_obj的行索引
        • 禁止层级索引,group_keys=False
      • apply可以用来处理不同分组内的缺失数据填充
        • 如:填充该分组的均值

数据清洗、合并、转换和重构

数据清洗

是一个迭代的过程
- 数据连接:pd.merge
- 根据单个或多个键将不同DataFrame的行连接起来
- 类比数据库的连接操作(见上一讲)
- 默认将重叠列的列名作为“外键”进行连接
- on 显示指定“外键”
- left_on, 左侧数据的“外键”
- right_on, 右侧数据的“外键”
- 默认是“内连接”(inner),即结果中的键是交集
- how指定连接方式
- “外连接”outer,结果中的键是并集
- “左连接”left
- “右连接”right
- 处理重复列名
- suffixes, 默认为_x, _y
- 按索引连接
- left_index = True 或 right_index = True

数据合并

  • 沿轴方向将多个对象合并到一起
  • NumPy的concat:np.concatenate
  • pd.concat
    • 注意轴的方向,默认axis = 0
    • join指定合并方式,默认为outer
    • Series合并时查看行索引
    • DataFrame合并时同时查看行索引和列索引

重构

  • stack
    • 将列索引旋转为行索引,完成层级索引
    • DataFrame -> Series
  • unstack
    • 将层级索引展开
    • Series ->DataFrame
    • 默认操作内层索引,即level = -1

数据转换

  • 处理重复数据
    • duplicated()返回布尔型Series表示每行是否为重复行
    • drop_duplicates()过滤重复行
      • 默认判断全部列
      • 可指定按某些列判断
  • map
    • Series根据map传入的函数对每行或每列进行转换
  • 数据替换
    • replace
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 透明胶带撕不起怎么办 马克笔颜料没了怎么办 匡威鞋掉色了怎么办 补眉后颜色很淡怎么办 磨砂画出毛了怎么办 纹眉毛不上色怎么办 四岁儿童龋齿怎么办 墙没有刷乳胶漆怎么办 壁纸不想要了怎么办 自粘墙纸撕不掉怎么办 打雷了怎么办主题画 打雷了怎么办小班教案 费雪小火车不走怎么办 宝宝睡觉要开灯怎么办 门上有人做记号怎么办 颜料粘上衣服洗不掉怎么办 半夜有小偷开锁怎么办 幼儿园人数较多怎么办 附近幼儿园拖班招满了怎么办 6个月大宝宝拉肚子怎么办 婴儿容易吐奶怎么办 新生儿睡眠时间颠倒怎么办 婴儿睡觉黑白颠倒怎么办 婴儿黑白颠倒了怎么办 宝宝肠粘膜受损怎么办 dnf会卡换装怎么办? 孩子不讲理蛮横怎么办 孩子不爱上学了怎么办 幼儿园孩子不爱上学怎么办 额头撞肿了怎么办 两岁半宝宝说话晚怎么办 1岁宝宝拉肚子怎么办? 小孩嗓子老哑怎么办 小孩嗓子经常哑怎么办 小孩子一年级成绩差怎么办 小孩子一年级学习成绩差怎么办 楼上有孩子扰民怎么办 隔壁小孩太吵怎么办 楼上孩子太吵怎么办 泰国贴纸签小孩怎么办 六个月宝宝近视怎么办