长宽格式的转换

宽格式是指:一列或多列作为标识变量(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 DataFrame

pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)的更多相关文章

  1. 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取

    1.数值计算和统计基础 常用数学.统计方法 数值计算和统计基础 基本参数:axis.skipna df.mean(axis=1,skipna=False)  -->> axis=1是按行来 ...

  2. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  3. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  4. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  5. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  6. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

  7. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  8. pandas 学习 第1篇:pandas基础 - 数据结构和数据类型

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...

  9. pandas 学习 第十一篇:处理缺失值

    Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...

随机推荐

  1. 七、3Dslicer的坐标系

    一.参考博客 https://blog.csdn.net/Huadong_eddy/article/details/84988166

  2. Oracle 11gR2中HR用户安装说明

    1.脚本下载: 链接: 1,脚本放在这个目录下$ORACLE_HOME/demo/schema/human_resources             hr_analz.sql  hr_code.sq ...

  3. Luogu P2210 Haywire 题解

    其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...

  4. HTML中跨域请求天气粗略效果

    HTML中跨域请求天气粗略效果 html+css部分: <style> table{ border:1px red solid; border-collapse: collapse; ma ...

  5. Spring 框架基础(01):核心组件总结,基础环境搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.Spring框架 1.框架简介 Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 ...

  6. Difference between JDK, JRE and JVM

    With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...

  7. 【构建之法教学项目】一个简单的基于C#的电子商务系统演练场景的代码示例

    电子商务平台,是一个历史悠久而又充满挑战的行业,他和社交一起成为中国互联网市场的两极.电子商务系统是一个非常复杂的系统,他实现了人与物.人与人的链接,同时也需要大量的技术来支撑,实现系统的高可用.这些 ...

  8. Sqlite-net 修改版 支持中文和CodeFirst技术

    最近, 做的一个windows 桌面WPF程序, 需要数据库支持.尝试了 sql server 的开发版,使用EF , 效率太低.后来采用sqlite数据库,中间踩坑无数.但最终完美的解决了这些问题. ...

  9. 【C#】学习笔记(3) 关于Events使用的小Demo

    关于Events事件的简单Demo. 目录结构: Program.cs using System; namespace EventsDemo { class Program { static void ...

  10. tomcat9启动后控制台输出乱码问题

    修改Tomcat9下 /conf/logging.properties 文件 找到java.util.logging.ConsoleHandler.encoding=utf-8 改成GBK 或者注释掉