Pandas行列转换

news2024/12/23 1:31:19

一、问题描述

在实际的数据处理过程中,常常会遇到需要将DataFrame中的列转换为行或将行转换为列的情况。但是,如果使用传统的Python方法,这种操作会非常繁琐且容易出错。因此,我们可以使用pandas库提供的优雅方式来完成列转行或行转列的任务。

二、列转行

1、函数melt

melt的主要参数:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value',ignore_index=True,  col_level=None)

下面解释参数的含义:

  • frame:要处理的数据框DataFrame。

  • id_vars:表示不需要被转换的列名

  • value_vars:表示需要转换的列名,如果剩下的列全部都需要进行转换,则不必写

  • var_name和value_name:自定义设置对应的列名,相当于是取新的列名

  • igonore_index:是否忽略原列名,默认是True,就是忽略了原索引名,重新生成0,1,2,3,4…的自然索引

  • col_level:如果列是多层索引列MultiIndex,则使用此参数;这个参数少用

import pandas as pd

# 创建数据集
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})

# 将ABC三列转换为行
df_melted = pd.melt(df, id_vars=['A'],
                    value_vars=['B', 'C'],
                    var_name='variable',
                    value_name='value')

print(df_melted)


   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
3  a        C      2
4  b        C      4
5  c        C      6

2、使用stack函数

使用stack函数可以将列转换为行。首先,我们需要明确将哪些列转换为行。下面的代码演示了如何将A,B,C三个列转换为行。

该方法利用了set_index和stack函数,其中set_index函数将'A'列作为索引,stack函数将所有的列转换为行,最后用reset_index函数重置索引,并修改列名。

import pandas as pd

# 创建数据集
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})

# 将ABC三列转换为行
df_stacked = df.set_index('A').stack().reset_index()
df_stacked.columns = ['A', 'variable', 'value']

print(df_stacked)

   A variable  value
0  a        B      1
1  a        C      2
2  b        B      3
3  b        C      4
4  c        B      5
5  c        C      6

3、转置函数

pandas中的T属性或者transpose函数就是实现行转列的功能,准确地说就是转置。

4、wide_to_long函数

pandas 中的 wide_to_long() 函数用于将宽格式的数据转换为长格式。宽格式数据通常是指具有多列的数据集,每一列代表不同的变量或特征。而长格式数据则是将这些变量整理到一列中,同时添加一个标识符列来表示原始变量的名称。

wide_to_long(df,stubnames,i,j,sep: str = "",suffix: str = "\\d+"

参数说明:

df:要转换的数据框(DataFrame)。
stubnames:一个字符串或字符串列表,表示要转换的列名的前缀。通常用于指定要堆叠的相关变量。
i:标识符列的名称或位置。可以是字符串或整数,用于表示唯一标识每个观察值的行标签。
j:新生成的列的名称。可以是字符串,用于表示转换后的变量名。
sep:用于分隔 stubnames 和 j 的连接符,默认为空字符串。
suffix:用于标识每个变量的正则表达式。默认为 '\d+',表示一个或多个数字。

5、爆炸函数-explode

explode 函数是 pandas.DataFrame 类的一个方法,它可以将一个包含 list 或者其他可迭代对象的列(column)拆分成多行,然后在所有其他列(non-explode)上进行复制。

explode 函数的原型如下:

DataFrame.explode(
    column,
    ignore_index=False
) -> Union['DataFrame', 'Series']

参数说明:

column:指定要拆分的列名;
ignore_index:如果为 True,则重置索引。

三、行转列

1、使用pivot函数

使用pivot函数可以将行转换为列。下面的代码演示了如何将A列作为索引,B列和C列中的值分别作为列,将另一个新列的值填充到每个单元格中。

该方法中的参数说明如下:

  • index:指定作为行索引的列名。

  • columns:指定需要转换为列的列名。

  • values:指定用于填充新列的列名。

import pandas as pd

# 创建数据集
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})

# 将行转换为列
df_pivoted = df.pivot(index='A', columns='B', values='C')

print(df_pivoted)

B    1    3    5
A               
a  2.0  NaN  NaN
b  NaN  4.0  NaN
c  NaN  NaN  6.0

2、使用set_index和unstack函数

使用set_index和unstack函数可以将行转换为列。下面的代码演示了如何将A列作为索引,B列和C列中的值分别作为列,将另一个新列的值填充到每个单元格中。

该方法中的set_index函数和unstack函数分别用于设置索引和行列转换。

import pandas as pd

# 创建数据集
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})

# 将行转换为列
df.set_index(['A', 'B'])['C'].unstack()

print(df)

B    1    3    5
A               
a  2.0  NaN  NaN
b  NaN  4.0  NaN
c  NaN  NaN  6.0

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

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

相关文章

RDMA操作类型(三)

Send操作 引用一下,IB协议第9.4.1章节原文: The SEND Operation is sometimes referred to as a Push operation or as having channel semantics. Both terms refer to how the SW client of the transport service views the movement of data. With …

uni-app:canvas-绘制图形4(获取画布宽高,根据画布宽高进行图形绘制)

效果 代码 var width ; var height ; const query uni.createSelectorQuery(); //获取宽度 query.select(#firstCanvas).fields({ size: true }, (res) > { width res.width; height res.height; }).exec(); console.log(宽度width); console.log(高…

代码随想录算法训练营 动态规划part04

一、动态规划:01背包理论基础 挺详细的代码随想录 (programmercarl.com) 二、动态规划:01背包理论基础(滚动数组) 代码随想录 (programmercarl.com) 三、 分割等和子集 416. 分割等和子集 - 力扣(LeetCode&#x…

软件安全测试和渗透测试有什么区别和联系?

随着网络攻击和数据泄露事件的频繁发生,软件系统的安全性已成为用户和企业关注的重要问题。通过进行软件安全测试和渗透测试,可以有效地发现和修复系统中的潜在漏洞和安全隐患,提高系统的抵御能力和可靠性。这不仅可以保护用户的隐私和数据安…

C语言进阶第四课-----------指针的进阶----------指针和数组笔试解释

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

手把手教你集成环信ReactNative离线推送

前言:在集成ReactNative推送之前,需要了解ReactNative与Android原生交互 一、RN与Android原生交互 RN给原生传递参数 步骤: 1.用Android Studio打开一个已经存在的RN项目,即用AS打开 项目文件夹/android,如下图所示 2.在An…

如何将微信、支付宝、字节等小程序直接迁移到自有app中

简要回顾一下 FinClip Studio 的相关能力: FinClip Studio 是一款强大的小程序云端容器,它可以将小程序嵌入到您的原生 App 中,实现无缝的融合体验。不仅如此,FinClip 还提供了一系列的工具和功能,以简化小程序的开发…

大模型训练之加速篇 -> peft(Lora) -> accelerator -> deepspeed (Zero)

HUGGINFACE PEFT库: 实现LORA, prefix-tuning. prompttuning, AdaLoRA, LLaMA-Adapter训练的库 HUGGINFACE accelerator库: 是一个将pytorch模型迁移到CPU/GPU/Multi-GPUs/TPU/Fp16/bf16模式下训练的一个标准库 DeepSpeed Pytorch的分布式并…

正点原子lwIP学习笔记——TCP协议

1.TCP协议简介 TCP协议,是一种面向连接、可靠的、基于字节流的传输层通信协议。 主要就是要知道,TCP协议是需要连接才可以互发数据的,连接需要三次挥手,而断开连接需要四次挥手。 2.TCP协议报文结构 TCP协议的头部一共有20字节&…

网易一面:Eureka怎么AP?Nacos既CP又AP,怎么实现的?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如网易、微博、阿里、汽车之家、极兔、有赞、希音、百度、滴滴的面试资格,遇到一几个很重要的面试题: Eureka是AP还是CP? 说说其集群数据一致性…

有哪些ai智能写作是永久免费的

无论你是一个自媒体作者,企业家,还是一个博客写手,你都了解创作的挑战。创意和时间常常成为限制因素,而AI智能写作工具则旨在解决这些问题。 这些工具利用先进的自然语言处理技术,可以生成各种类型的文本,包…

Appium+python+unittest搭建UI自动化框架

阅读本小节,需要读者具备如下前提条件: 掌握一种编程语言基础,如java、python等。 掌握一种单元测试框架,如java语言的testng框架、python的unittest框架。 掌握目前主流的UI测试框架,移动端APP测试框架Appium&…

Java中的IO流的缓冲流

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 文章目录 🌴IO流体系结构🌴缓冲流1.提高效率的原理2.缓冲流的类型3.字符缓冲流两个特有方法 🌴总结 🌴IO流体系…

如何查阅下载美国物理学会(APS)文献

APS美国物理学会数据库简介: The American Physical Society (APS)成立于1899年,是世界上最具声望的物理学专业学会之一。APS不仅为用户带来今日尖端研究,同时为全球各研究单位提供自1893年以来,在“PHYSICAL REVIEW”上刊载的所…

2020年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下代码中,输出的结果是?( ) sum0 for i in range(1,10,3):sumsumi p…

88、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Set相关命令

本次讲解要点: ** Set相关命令:是指value中的数据类型** 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe …

智慧能源:引领未来的能源革命

在当今世界,能源问题是一个备受关注的焦点话题。随着全球人口的不断增长和工业化进程的加速,对能源的需求也日益增加,同时,传统的能源资源面临着日益严重的枯竭和环境污染问题。在这一背景下,智慧能源应运而生&#xf…

vite跨域proxy设置与开发、生产环境的接口配置,接口在生产环境下,还能使用proxy代理地址吗

文章目录 vite的proxy开发环境设置如果后端没有提供可以替换的/mis等可替换的后缀的处理办法接口如何区分.env.development开发和.env.production生产环境接口在生产环境下,还能使用proxy代理地址吗? vite的proxy开发环境设置 环境: vite 4…

服务断路器_服务雪崩解决方案之服务隔离

那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 因此,做服务隔离是很有必要的。 什么…

消费者偏移量_consumer_offsets相关解析

1.概述 __consumer_offsets 是 kafka 自行创建的,和普通的 topic 相同。它存在的目的之一就是保存 consumer 提交的位移。 __consumer_offsets 的每条消息格式大致如图所示: 可以想象成一个 KV 格式的消息,key 就是一个三元组:group.idtopi…