重塑层次化索引

Pandas中重塑层次化索引的操作主要是stack()方法和unstack()方法,前者是将数据的列“旋转”成行,后者是将数据的行“旋转”成列。

stack(self, level=-1, dropna=True)

上述方法中部分参数表示的含义如下:

level:表示操作内层索引。若设为0,表示操作外层索引,默认为-1

dropna:表示是否将旋转后的缺失值删除,若设为True,则表示自动过滤缺失值,设置False则相反

unstack(self, level=-1, fill_value=None)

上述方法中部分参数表示的含义如下:

level:表示操作内层索引。若设为0,表示操作外层索引,默认为-1

fill_value:若产生了缺失值,则可以设置这个参数用来替换NaN

对于单层索引的DataFrame类对象

stack()方法

测试对象:

df1:

A B

a A0 B0

b A1 B1

代码:

import numpy as np

df1 = pd.DataFrame({'A': ['A0', 'A1'],

'B': ['B0', 'B1']},

index=['a', 'b'])

df2 = pd.DataFrame(np.arange(8).reshape(2, 4),

columns=[['A', 'A', 'B', 'B'],

['A0', 'A1', 'B0', 'B1']])

result = df1.stack()

print("df1.stack():\n", result)

输出结果:

df1.stack():

a A A0

B B0

b A A1

B B1

dtype: object

从输出结果看出,result对象具有两层行索引。

具有两层行索引而不再具有列索引的对象到底是DataFrame对象还是Series对象呢?

我们使用type()函数来查看result的类型,与df1做对比

type(df1):

type(result):

从输出结果可以看出,DataFrame对象已经被转换成了一个Series对象。

unstack()方法

尝试将result对象重塑成df1,先将result.unstack()的结果保存在ans对象里

代码:

ans = result.unstack()

print("ans:\n", ans)

输出结果:

ans:

A B

a A0 B0

b A1 B1

使用type()函数查看ans的类型,然后将其与df1作比较

代码:

print("type(ans):\n", type(ans))

print("ans == df1?", ans == df1)

输出结果:

type(ans):

ans == df1?

A B

a True True

b True True

由上可知,unstack()方法是stack()方法的逆操作,可以将重塑的Series对象“恢复原样”,转变成原来的DataFrame对象。

对于多层索引的DataFrame类对象

测试对象:

df2:

A B

A0 A1 A0 A1

0 0 1 2 3

1 4 5 6 7

辨析操作内层索引与外层索引的区别

代码:

df2 = pd.DataFrame(np.arange(8).reshape(2, 4),

columns=[['A', 'A', 'B', 'B'],

['A0', 'A1', 'A0', 'A1']])

result1 = df2.stack() # 操作内层索引

result2 = df2.stack(level=0) # 操作外层索引

print("df2.stack():\n", result1)

print("df2.stack(level=0):\n", result2)

输出结果:

df2.stack():

A B

0 A0 0 2

A1 1 3

1 A0 4 6

A1 5 7

df2.stack(level=0):

A0 A1

0 A 0 1

B 2 3

1 A 4 5

B 6 7

查看多层索引对象转换后的类型

代码:

print("type(result1):\n", type(result1))

print("type(result2):\n", type(result2))

输出结果:

type(result1):

type(result2):

对于多层索引来讲,即使将外层行(列)索引或者内层行()列索引转换为列(行)索引,也不过是多层变单层,只要行和列两个方向仍然同时至少有单层索引存在,DataFrmae对象转换后就仍为DataFrame对象。

轴向旋转——pivot()方法

pivot()会根据给定的行索引或列索引重新组织一个DataFrame对象

pivot(self, index=None, columns=None, values=None)

上述方法中部分参数表示的含义如下:

index:用于创建新DataFrame对象的行索引 。如果未设置,则使用原DataFrame对象的索引。

columns:用于创建新DataFrame对象的列索引 。如果未设置,则使用原DataFrame对象的索引。

values:用于填充新DataFrame对象中的值。

代码:

df3 = pd.DataFrame({'A': ['A0', 'A0', 'A1', 'A1'],

'B': ['B0', 'B1', 'B0', 'B1'],

'C': ['C0', 'C1', 'C2', 'C3']})

print("df3:\n", df3)

print("df3.pivot(index='A', columns='B', values='C'):\n",

df3.pivot(index='A', columns='B', values='C'))

输出结果:

df3:

A B C

0 A0 B0 C0

1 A0 B1 C1

2 A1 B0 C2

3 A1 B1 C3

df3.pivot(index='A', columns='B', values='C'):

B B0 B1

A

A0 C0 C1

A1 C2 C3

本文地址:https://blog.csdn.net/Jormungand_V/article/details/109841128

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python stack unstack_Python之数据重塑相关推荐

  1. 【Python】merge:数据规整化:清理、转换、合并、重塑

    merge:数据规整化:清理.转换.合并.重塑 目录: 文章目录 @[toc] 一 合并数据集 1 数据库风格的DataFrame合并 2 索引上的合并 3 轴向连接 4 合并重叠数据 二 重塑和轴向 ...

  2. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  3. pandas数据分析之数据重塑透视(stack、unstack、melt、pivot)

    在数据分析的过程中,分析师常常希望通过多个维度多种方式来观察分析数据,重塑和透视是常用的手段. 数据的重塑简单说就是对原数据进行变形,为什么需要变形,因为当前数据的展示形式不是我们期望的维度,也可以说 ...

  4. Python数据攻略-Pandas数据重塑及透视表

    大家好,我是Mr数据杨.让我们一起走进Python的世界,揭开它在数据处理中的神秘面纱.让我带你走进<三国演义>,看看Python在三国演义中的应用.想象一下,假如诸葛亮在草船借箭这个计划 ...

  5. python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...

    1. 数据清洗 1.1 空值和缺失值的处理 ​空值一般表示数据未知.不适用或将在以后添加数据.缺失值是指数据集中某个或某些属性的值是不完整的. ​一般空值使用None表示,缺失值使用NaN表示 1.1 ...

  6. Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记

    文章目录 1. 数据清洗 1.1 空值和缺失值的处理 1.1.1 使用isnull()和notnull()函数 1.1.1.1 isnull()语法格式: 1.1.1.2 notnull()语法格式: ...

  7. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  8. 利用Python进行数据分析:数据规整(基于DataFrame)

    利用Python进行数据分析:数据规整 在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 文章目录 利用Python进行数据分析:数据 ...

  9. reshape功能介绍_Pandas中的数据重塑(reshape)功能

    引言Pandas 是 python中常用的数据分析软件库,它提供了 DataFrames 和 Series 的工具,这使得 numpy 和 matplotlib 可以更加便捷地读取转换数据.数据重塑表 ...

  10. 【Python】GroupBy:数据聚合与分组运算

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

最新文章

  1. DataGrid基于Access的快速分页法
  2. 【失败的尝试】C++中使用string进行switch判断
  3. linux视频教程之进程管理
  4. 如何用R和API免费获取Web数据?
  5. Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
  6. 神策数据《品牌零售业数字化运营的方法论及实践》白皮书重磅发布
  7. 唯一标识计算机的位置目录与文件的是,计算机应用基础 7.doc
  8. 解决linux写入ntfs盘时报错:只读文件系统
  9. 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d详解(二)
  10. 020 ceph作openstack的后端存储
  11. 【软件领域知识整理】贵金属交易的K线图解释(二)
  12. Linux下安装Apache Maven安装
  13. android关于16进制转字符串的问题
  14. linux下安装asio4ks,FL Studio 第一步 初始化 2020-10-01
  15. Linux操作系统引导过程及MBR扇区故障解决
  16. linux 修改网卡 mac地址命令,Centos系统下查看和修改网卡Mac地址(附ifconfig命令格式)...
  17. QT ffmpeg 播放器
  18. 职业生涯阶段性回顾之第一个五年计划
  19. 计算机应用公式求和,Excel函数教程:与求和有关的函数
  20. 关于Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp异常问题的解读

热门文章

  1. 【无标题】Win10鼠标单击右键点击“显示设置”,“个性化”弹出该文件没有与之关联的程序来执行该操作。
  2. CoLA任务的数据增强方法
  3. 贴吧防删图应该怎么学?【万能的小胡】
  4. 一文详解 Android热修复实现原理
  5. php 操作 PSD,PHP中使用Imagick操作PSD文件实例
  6. 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc
  7. 一个简单的推荐系统实现
  8. 写代码有这16个好习惯,可以减少80%非业务的bug
  9. 漏洞库:爬取NVD-美国国家信息安全漏洞库
  10. 提高你修养的100句话