【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题

news2024/10/6 3:12:15

【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🎯 1. 基本介绍
  • 💡 2. 使用方法
    • 2.1 stack函数使用
    • 2.2 unstack函数使用
  • 🔍 3. 高阶用法
    • 3.1 特征工程中的trick
    • 3.1 fillna函数进行数据填充
  • 🔍 4. 注意事项
  • 🔧 5. 总结

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1. 基本介绍

  在Pandas中,DataFrame 是一种非常灵活的数据结构,它允许我们以表格的形式存储和操作数据。stack 和 unstack 是两个用于操作多级索引(multi-index,也称为层次化索引)的函数,它们可以帮助我们重塑数据的形状,以适应不同的分析需求。
  在介绍上述的两个函数之前,先得对pandas数据格式得索引有一定得了解会比较容易发挥这两个函数得强大功能,个人感觉可以将其理解为数据的一种Hashmap,如下图片中左边的红色框中为一层索引 key-value的不同之处,右边的为两层索引,需如要果注使意用的是行索列引转可换以函重数复不,设这置个索和引字典的中话的,会使用默认的索引(0,1,2…)这样也发挥不出开列转行函数的作用,大家如果用过pandas里面的神奇函数pivot, 可以去看看里面的核心代码就是这两个函数的转换
在这里插入图片描述

💡 2. 使用方法

2.1 stack函数使用

  为了要大家更加方便的看到改函数的作用,首先,我们创建一个具有多级索引的 DataFrame。具体如下所示:

import pandas as pd

# 创建多级索引
index = pd.MultiIndex.from_product([['A', 'B'], ['X', 'Y', 'Z']], names=['Letter', 'Category'])

# 创建 DataFrame
df = pd.DataFrame({'Data': range(6)}, index=index)

# 显示 DataFrame
print(df)

Letter  Category
A       X            0
        Y            1
        Z            2
B       X            3
        Y            4
        Z            5
Name: Data, dtype: int32

  对上述的多级索引数据,stack 方法用于将索引的一个级别转换为列。具体操作如下:

# 使用 stack 将 'Category' 级别转换为列
stacked_df = df.stack('Category')

# 显示 stack 后的 DataFrame
print(stacked_df)

Category  X  Y  Z
Letter         
A        0  1  2
B        3  4  5

2.2 unstack函数使用

  unstack 方法与 stack 相反,它将一个级别的列转换回索引。

# 使用 unstack 将列转换回索引
unstacked_df = stacked_df.unstack('Category')

# 显示 unstack 后的 DataFrame
print(unstacked_df)

Category  X  Y  Z
Letter         
A        0  1  2
B        3  4  5

🔍 3. 高阶用法

3.1 特征工程中的trick

  当有两层行索引的时候,如果想要去掉设置的索引改为默认的直接重设即可:

 # 设置多层索引  result.unstack(level=0) 
 #将第2层索引翻转为列,-1为第一层索引  
 # 这个翻转函数在进行特征工程的时候经常会用到: 
 1. 当有两层行索引的时候,如果想要去掉设置的索引改为默认的直接重设即可:
 df.reset_index()
 2. 当有两层列索引的时候,往往进行特征提取的时候,需要将多张表进行meger或者concat,这个时候表的columns都是单层的,
 这个时候可以使用ravel骚函数或者将其转为元组类型的list,将多层的表转换为单层的表:
 pair_cols= df.columns.ravel() 
 df.columns = [str(i) + '_' str(j) for i, j in pair_cols]

3.1 fillna函数进行数据填充

  数据分析真实场景中,缺失值的存在是不可明显存在的,对很多的算法不支持缺失数据的出现,因此,经常需要对缺失的数据进行填充,具体的填充方法为:

import pandas as pd
import numpy as np

# 创建示例数据
data = {'A': [1, np.nan, 3, 4],
        'B': [5, 6, np.nan, 8]}
df = pd.DataFrame(data)

# 填充缺失值为指定值
filled_df = df.fillna(value=0)
print(filled_df)

# 使用列的统计值填充缺失值
mean_filled_df = df.fillna(value=df.mean())
print(mean_filled_df)

# 使用前一个有效值填充缺失值
ffill_filled_df = df.fillna(method='ffill')
print(ffill_filled_df)

A    B
0  1.0  5.0
1  0.0  6.0
2  3.0  0.0
3  4.0  8.0

     A    B
0  1.0  5.0
1  2.7  6.0
2  3.0  6.3
3  4.0  8.0

     A    B
0  1.0  5.0
1  1.0  6.0
2  3.0  6.0
3  4.0  8.0

  

🔍 4. 注意事项

  对上述的各个函数在使用的过程中需要注意的一些事项,不然可能会出现error,具体主要为:

  • 使用 stack 时,如果原始 DataFrame 有多个列,stack 后将只保留一个列,其他列的数据将丢失。
  • unstack 可以用于恢复 stack 操作之前的状态,但要注意,如果 stack 后的数据经过了修改或筛选,unstack 可能无法完全恢复原始结构。
  • 当使用 stack 或 unstack 时,如果指定的级别不存在,会引发 KeyError。

🔧 5. 总结

  stack 和 unstack 是 Pandas 中处理多级索引的强大工具,它们可以帮助我们以不同的方式查看和分析数据。通过 stack,我们可以将索引的一个级别转换为列,而 unstack 则可以将列转换回索引。这些操作在处理具有复杂层次结构的数据时非常有用。本文通过实际的代码示例和输出结果,展示了如何使用这两个函数来处理具有多级索引的 DataFrame,希望能够帮助读者更好地理解这些概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代,屏幕录制成为了一项不可或缺的技能,无论是教学演示、游戏直播,还是软件操作教程,屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品,其屏幕录制功能也备受用户关注。本文将详细…

GeoJson 地图地理信息数据获取

效果图: 获取渠道: 通过阿里数据可视化平台获取通过Vector Maps获取通过geojson来获取 1、通过阿里数据可视化平台获取 2、通过Vector Maps获取 3、通过geojson获取

618数码好物有哪些?热门榜单强势出炉

大家好!随着6.18购物狂欢节的来临,我可以明白在面对非常吸引人的商品时,“选择困难症”就上来了。因此,为了帮助大家在这场购物盛事中有方向,我特意结合个人使用体验和市场研究,为大家筛选了几件既具有超高…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题(一)【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片,内置玄铁64bit RISC-V CPU C906,主频高达600MHz,算力约1380DMIPS。 Model4系列工业级MPU具…

课程设计——基于FPGA的交通红绿灯控制系统(源代码)

摘要: 本课程设计旨在设计一个基于FPGA(现场可编程门阵列)的交通红绿灯控制系统。该系统模拟了实际道路交叉口的红绿灯工作场景,通过硬件描述语言(如Verilog或VHDL)编写源代码实现。系统包含三个主要部分&a…

DAY6-力扣刷题

1.下一个排列 31. 下一个排列 - 力扣(LeetCode) 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组…

2024年移动端技术探索

2024年移动端技术探索 引子 2023年号称AI元年,AI带来了一些不是很清晰的机会,没有看到有多好的落地,对于互联网,不止技术层面没有突破,业务层面的需求也断崖式下滑,没有创新就没有需求,老业务…

Folly,一个强大的C++库

目录 1.引言 2.Folly库的特点 3.Folly库的应用场景 4.示例代码 5.总结 1.引言 Folly 是Facebook开发的一个开源、无许可(Apache 2.0)的现代C库,旨在提升性能和简化编写复杂任务的工作流程。它包含了一系列用于系统级编程的工具&#xff…

联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)

OceanBase《DB大咖说》第 10 期,我们邀请到了联华集团的CTO楼杰,来分享他如何思考 IT 业务价值,以及联华华商数据库的升级实践。 楼杰从大学毕业后就进入了联华工作,并一直扎根在近 20 年的,从一名底层的技术员成长为…

Swift Combine — Future和Promise的使用

平时在开发的过程中,免不了进行异步编程,比如进行网络请求,以前异步编程的时候主要采用两种方法: 通过代理方法,设置代理,实现代理方法。通过闭包block块处理。 采用第一种方法代码分家,不利于…

eNSP学习——配置DHCP中继

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置DHCP服务器 4、配置DHCP中继 5、配置PC获取地址方式为DHCP 主要命令 //配置指定DHCP服务器的方法 //方法一:在面向PC的接口下直接配置DHCP服…

CentOS 7.9上创建的JBOD阵列恢复(二)

系列文章目录 CentOS 7.9上创建JBOD(一) CentOS 7.9检测硬盘坏区、实物定位(三) 文章目录 系列文章目录前言一、用命令查看是否认到盘二、直接组JBOD三、挂载到新目录四、查看原数据总结 前言 在CentOS 7.9上创建了一个软阵列JB…

游戏运营与发行:从入门到实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

数据中心分类和类别综合指南

数据中心可根据其规模、功能、所有权、层级和部署方法进行分类。以下是一些典型的数据中心类别和分类。 数据中心的分类和分级 根据尺寸 1. 小型数据中心:通常是为了满足对IT基础设施需求较少的组织或小型企业的需求而创建的。与大型数据中心相比,小型…

Redis缓存设计之常见问题及解决方案

背景:缓存的常见问题及对应的解决方案进行了整理,给大家分享一下。 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储 层查不到数据则不写入缓存层。 缓…

【深度学习】GPT-3,Language Models are Few-Shot Learners(一)

论文: https://arxiv.org/abs/2005.14165 摘要 最近的研究表明,通过在大规模文本语料库上进行预训练,然后在特定任务上进行微调,可以在许多NLP任务和基准上取得显著的进展。虽然这种方法在结构上通常是任务无关的,但…

国内外LabVIEW开发的区别

​分析国内外在LabVIEW开发中的差异需要从多个方面进行比较,包括界面设计、架构设计、注释与文档、调试方法、维护策略以及升级与迭代管理等。 界面设计: 国外的LabVIEW界面设计通常更加注重用户体验和视觉美观,使用现代化的控件和布局&…

基于ResNet-18的简单分类(新手,而且网络效果不咋滴,就是学个流程)

引言 先看问题: 我手边有一数据集,然后我想分分类!~~ 咳咳,最近刚做了一个:训练集有1143张,分为5类,里面图片是打乱的。测试集有248张,想把它分分类看看咋样。 再看一下效果: …

mellanox HCA IB网卡固件更新

注意事项: 1.如果PSID以SGN开头,说明该产品是曙光的OEM产品,可以向HPC高速网络部获取固件。如果PSID以MT开头,说明该产品是Mellanox或nvidia的标准产品,可以通过官网下载固件。 2.通过官网获取固件,一定要…

Nginx缓存之web缓存配置

Web 缓存可节约网络带宽,有效提高用户打开网站的速度。由于应用服务器被请求次数的降低,也相对使它的稳定性得到了提升。Web 缓存从数据内容传输的方向分为前向位置缓存和反向位置缓存两类。如下图所示。 前向位置缓存既可以是用户的客户端浏览器&#x…