小象学院_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’]]
- Series索引
- 索引操作总结
- Pandas的索引可归纳为3种
- .loc, 标签索引
- .iloc, 位置索引
- .ix, 标签与位置混合索引
- 先按标签索引尝试操作,然后按位置索引尝试操作
- 注意
- DataFrame索引时可将其看作ndarray操作
- 标签的切片索引时包含末尾位置的
- 运算与对齐
- 按索引对齐运算,没对齐的位置补NaN
- Series 按行索引对齐
- DataFrame 按行,列索引对齐
- 填充未对齐的数据进行运算
- 使用add, sub, div, mul
- 同时通过fill_value指定填充值
- 填充NaN:fillna
- 按索引对齐运算,没对齐的位置补NaN
- 函数应用
- 可直接使用NumPy的ufunc函数,如abs等
- 通过apply将函数应用到行或列上
- 注意指定轴的方向,默认axis = 0
- 通过applymap将函数应用到每个数据上
- 排序
- sort_index , 索引排序
- 对DataFrame操作时注意轴方向
- 按值排序:
- sort_values(by = ‘label’)
- sort_index , 索引排序
- 处理缺失数据
- 判断是否存在缺失值
- 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
- 小象学院_Python数据分析_第三讲_Pandas
- 小象学院_Python数据分析_第二讲_数据采集与操作
- Python数据分析_Pandas
- 2017小象学院Python数据分析与挖掘
- 小象学院
- python数据分析基础1_Pandas
- 小象学院2017年最新基于Python数据分析班升级版高清精品推荐
- Spark小象学院笔记
- 小象学院hadoop进阶
- 《用python进行员工离职原因分析与预测-----小象学院公开课》
- 小象学院Hadoop2.x大数据平台V3完全入门实战
- Scala基础与实践练习题[小象学院]
- 小象数据分析和数据挖掘(豆瓣数据案例,时间序列分析和金融数据,金融数据分析案例)
- Sqoop安装使用手册_云帆大数据学院
- 小象学院深度学习笔记1(传统神经网络)
- 小象学院深度学习笔记2(卷积神经网络-基础)
- 小象学院深度学习笔记4(卷积神经网络-目标分类)
- 小象学院《分布式爬虫实战》第二期视频教程
- 关于一个程序的“开始——暂停——继续”的一个问题
- linux之学习live555视频笔记
- 玩转飞思卡尔在线调试工具FreeMaster
- kinetis时钟模块MCG详解
- [解析]BeeGFS将是高性能计算领域的一匹黑马
- 小象学院_Python数据分析_第三讲_Pandas
- 深度安卓恶意软件检测系统:用卷积神经网络保护你的手机
- 如何在STM32F10x_StdPeriph_Template基础上建立自己的MDK工程
- C++知识整理(上)
- Stm32f10x 新建工程详解
- HTML+CSS编写静态网站-20 CSS颜色属性详解
- stm32深入浅出——由GPIO谈谈寄存器配置
- Mysql 增减查询基本语句
- 【ALIENTEK 战舰STM32开发板例程系列连载+教学】第三十章 CAN通信实验