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 ...
随机推荐
- Flask中获取参数(路径,查询,请求体,请求头)
上一篇中已经讲述了:HTTP协议向服务器传参有几种途径{ 链接 } 在Flask中同样通过这4中传参途径进行归纳: 1. URL中路径参数的获取: 拓展: # 路由参数/路径参数:http://127 ...
- numpy函数查询手册
写了个程序,对Numpy的绝大部分函数及其说明进行了中文翻译. 原网址:https://docs.scipy.org/doc/numpy/reference/routines.html#routine ...
- linux命令-挂载命令
一.挂载命令 1.mount 命令基本格式 linux 所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户 [root@localhos ...
- CentOS7升级OpenSSL版本
1.CentOS7.6默认安装的openssl版本为 # 查看openssl版本 openssl version 2.下载最新的openssl wget https://www.openssl.org ...
- Gerrit常见命令及最佳实践
概述 本文记录了笔者在使用Gerrit(一种免费.开放源代码的代码审查软件)过程中的一些微小的经验,在这里做个简单的分享. 克隆工程 git clone ssh://tusi@xx.xx.cn:294 ...
- Web前端基础(11):JavaScript(五)
1. 初识DOM 1.1 DOM介绍 1.1.3 什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定 ...
- docker: manifest for elasticsearch:latest not found
今天在docker安装es出现坑,是这样. 使用: docker pull elasticsearch 提示:manifest for elasticsearch:latest not found如图 ...
- cmdb项目-1
1.什么是cmdb 配置管理数据库 ,存储基础设备的各种信息配置等 CMDB可以存储并自动发现整个IT网络上的各种信息,比如一个IT网络上有多少台服务器.多少存储.设备的品牌.资产编号.维护人员.所属 ...
- nginx实现基础web
目录 nginx实现基础web 什么是lnmp lnmp架构如何工作 Nginx与Fast-CGO详细工作流程 LNMP环境准备 一,部署LNMP 1.使用nginx官方源 2.创建nginx用户 3 ...
- Erlang/Elixir精选Q&A
精选的定位是什么? 已至2019年,Erlang/Elixir中文社区还是一座黑暗森林,每个技术人都怀揣着自己独有的葵花宝典独自摸索,没有一个开放的分享平台,大量优质文章没有得到该有的关注. 与此同时 ...