pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)
长宽格式的转换
宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1、id2、var1、var2、var3,一行可以表示多个度量变量的值。
而长格式是指在一行中,除了标识变量(id_vars),其他列是variable和name,从宽格式转换为长格式,会使得数据行数增加,直观上看,这种格式的数据比较长,举个例子,列名是:id1、id2、variable、value,一行只表示一个度量变量的值。
在宽格式转换为长格式的过程中,宽格式中的多个度量变量进行了分裂,使得长格式中的每一行,实际上,只表示一个度量变量的值。
有如下宽数据:
>>> df = pd.DataFrame({'idA': {0: 'a', 1: 'b', 2: 'c'},
... 'varB': {0: 1, 1: 3, 2: 5},
... 'varC': {0: 2, 1: 4, 2: 6}})
>>> df
idA varB varC
0 a 1 2
1 b 3 4
2 c 5 6
1,融合数据(melt)
把数据从宽格式转换为长格式
DataFrame.melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
参数注释:
- id_vars:作为标识变量的列
- value_vars:作为值的列
- var_name:默认值是variable,对长格式中度量变量的列名所在的列进行命名
- value_name:默认值是value,对长格式中度量变量的列值所在的列进行命名
- col_level:如果列是MultiIndex,使用这个level的索引进行melt
举个例子,把示例中的宽数据转换为长数据,id列是idA,度量变量是varB,得到如下长数据:
>>> df.melt(id_vars='idA',value_vars='varB')
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5
id列是idA,度量变量是varB和varC,得到如下长数据:
>>> df.melt(id_vars='idA',value_vars=['varB','varC'])
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5
3 a varC 2
4 b varC 4
5 c varC 6
2,重塑数据(pivot)
把数据从长格式转换为宽格式,返回按照特定的index或column重塑的DataFrame:
DataFrame.pivot(self, index=None, columns=None, values=None)
参数注释:
- index:用于创建新DataFrame的索引,相当于分组列,相同索引的行称为一个小分组。
- columns:根据columns指定的列值来创建新DataFame的列名,使用该参数指定的列来创建结果的列名。
- values:和columns对应,表示相应列的列值,用于填充结果列的列值
重塑数据的流程:
- 根据index的唯一值进行分组,
- 把columns指定的列的唯一值作为结果的列名,即,列的值作为结果的列名
- 把values对应的列值作为新列名的值,即,把列的值作为结果中对应列的值
举个例子,有如下长格式的数据:
>>> df=df.melt(id_vars='idA',value_vars=['varB','varC'])
>>> df
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5
3 a varC 2
4 b varC 4
5 c varC 6
使用pivot把长格式转换为宽格式,按照idA列进行分组,把variable的列值作为结果的列名,把values的列值作为结果列的值:
>>> df.pivot(values='value',columns='variable',index='idA')
variable varB varC
idA
a 1 2
b 3 4
c 5 6
重塑的数据包含行索引idA,列标签varB和varC,其中variable是列标签的name。
使用reset_index()函数把行索引转换为列,其中variable是列索引的名称:
>>> df.pivot(values='value',columns='variable',index='idA').reset_index()
variable idA varB varC
0 a 1 2
1 b 3 4
2 c 5 6
透视表(pivot_table)
透视表是指按照特定的index和columns进行聚合操作之后的表,该函数和pivot函数的行为相似,只不过会对值进行聚合操作:
DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)
参数注释:
- values:聚合的列
- index:分组器,作为结果的索引
- columns:分组器,作为结果的列
- aggfunc:聚合的函数
- fill_value:用于填充缺失值的值
- margins:bool,默认值是True,把所有行或列的值加和,计算subtotal(小组和)或grand total(总合)
- margins_name:str,默认值是All,当margins为Ture时,为每个汇总设置名称。
- observed:boolean, default False,仅适用于分组器是分类索引的。
例如,对长数据进行重塑,获得透视表:
>>> df.pivot_table(values='value',index='idA',columns='variable',aggfunc='mean')
variable varB varC
idA
a 1 2
b 3 4
c 5 6
参考文档:
pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)的更多相关文章
- 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取
1.数值计算和统计基础 常用数学.统计方法 数值计算和统计基础 基本参数:axis.skipna df.mean(axis=1,skipna=False) -->> axis=1是按行来 ...
- pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)
DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...
- pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...
- Pandas 学习 第9篇:DataFrame - 数据的输入输出
常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...
- pandas 学习 第14篇:索引和选择数据
数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...
- pandas 学习 第1篇:pandas基础 - 数据结构和数据类型
pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...
- pandas 学习 第十一篇:处理缺失值
Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...
随机推荐
- JS数组去掉某一个元素
/**数组去掉某一个元素**/ Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index &g ...
- 埃氏筛法(求n以内有哪些个质数)
核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数...以此类推) #include <b ...
- ArrayList 与数组的“纠缠不清”的暧昧
目录 前言 正话(个人的见解,有误请多指教) 惯例先明白它是什么? 那么它有什么用呢? 怎么用 前言 能不能有一种数组可以在删除掉某些元素自动缩小就好了.可是话说哪里学的Java?数组能删除元素吗?今 ...
- Oracle数据库的sql语句性能优化
在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目 ...
- iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?
题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewCo ...
- Thymeleaf对象的使用:日期对象
Thymeleaf在模板中使用 #dates 或 #calendars 两个对象来处理日期,这两个对象大部分类似. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2 ...
- ABP入门教程12 - 展示层实现增删改查-脚本
点这里进入ABP入门教程目录 创建目录 在展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\下新建文件夹Course //用以存放Course相关脚 ...
- 23种设计模式之Builder设计模式
概述 建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在 ...
- python升级带来的yum异常(解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:)
解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 错误: 原因: 这是因为yum采用python作为命令解 ...
- Linux:LAMP环境的搭建
LAMP环境的搭建 安装DNS服务器 安装DNS服务 yum install bind -y DNS的配置 创建正向解析 以创建一个名为"lsy.com"的正向查找区域为例: 第一 ...