Python 行列转换这几招真的很棒啊

这篇具有很好参考价值的文章主要介绍了Python 行列转换这几招真的很棒啊。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,本文介绍的是 Pandas 中4个行列转换的方法,包含:

  • melt

  • 转置T或者transpose

  • wide_to_long

  • explode(爆炸函数)

Pandas 行列转换

Python 行列转换这几招真的很棒啊

导入库

import pandas as pd  
import numpy as np  

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:pythoner666,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

函数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,则使用此参数;这个参数少用

模拟数据

# 待转换的数据:frame  
df = pd.DataFrame({"col1":[1,1,1,1,1],  
                   "col2":[3,3,3,3,3],  
                   "col3":["a","a","a","b","b"]  
                  })  
df  

Python 行列转换这几招真的很棒啊

id_vars

Python 行列转换这几招真的很棒啊

value_vars

Python 行列转换这几招真的很棒啊

上面两个参数的同时使用:

Python 行列转换这几招真的很棒啊

同时转换多个列属性:

Python 行列转换这几招真的很棒啊

var_name和value_name

pd.melt(  
    df,  
    id_vars=["col1"],  # 不变  
    value_vars=["col3"],  # 转变  
    var_name="col4",  # 新的列名  
    value_name="col5" # 对应值的新列名  
)  

Python 行列转换这几招真的很棒啊

ignore_index

默认情况下是生成自然索引:

Python 行列转换这几招真的很棒啊

可以改成False,使用原来的索引:

Python 行列转换这几招真的很棒啊

转置函数

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

简单转置

模拟了一份数据,查看转置的结果:

Python 行列转换这几招真的很棒啊

使用transpose函数进行转置:

Python 行列转换这几招真的很棒啊

还有另一个方法:先对值values进行转置,再把索引和列名进行交换:

Python 行列转换这几招真的很棒啊

最后看一个简单的案例:

Python 行列转换这几招真的很棒啊

wide_to_long函数

字面意思就是:将数据集从宽格式转换为长格式

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

参数的具体解释:

  • df:待转换的数据框

  • stubnames:宽表中列名相同的存根部分

  • i:要用作 id 变量的列

  • j:给长格式的“后缀”列设置 columns

  • sep:设置要删除的分隔符。例如 columns 为 A-2020,则指定 sep=‘-’ 来删除分隔符。默认为空。

  • suffix:通过设置正则表达式取得“后缀”。默认’\d+‘表示取得数字后缀。没有数字的“后缀”可以用’\D+'来取得

模拟数据

Python 行列转换这几招真的很棒啊

转换过程

使用函数实施转换:

Python 行列转换这几招真的很棒啊

设置多层索引

先模拟一份数据:

Python 行列转换这几招真的很棒啊

Python 行列转换这几招真的很棒啊

如果不习惯多层索引,可以转成下面的格式:

Python 行列转换这几招真的很棒啊

sep和suffix

df5 = pd.DataFrame({  
    'a': [1, 1, 2, 2, 3, 3, 3],  
    'b': [1, 2, 2, 3, 1, 2, 3],  
    'stu_one': [2.8, 2.9, 1.8, 1.9, 2.2, 2.3, 2.1],  
    'stu_two': [3.4, 3.8, 2.8, 2.4, 3.3, 3.4, 2.9]  
})  
df5  

Python 行列转换这几招真的很棒啊

pd.wide_to_long(  
    df5,   
    stubnames='stu',   
    i=['a', 'b'],   
    j='number',  
    sep='_', # 列名中存在连接符时使用;默认为空  
    suffix=r'\w+')  # 基于正则表达式的后缀;默认是数字\d+;这里改成\w+,表示字母  

Python 行列转换这几招真的很棒啊

爆炸函数-explode

explode(column, ignore_index=False)  

这个函数的参数就只有两个:

  • column:待爆炸的元素

  • ignore_index:是否忽略索引;默认是False,保持原来的索引

模拟数据

Python 行列转换这几招真的很棒啊

单个字段爆炸

对单个字段实施爆炸过程,将宽表转成长表:

Python 行列转换这几招真的很棒啊

参数ignore_index

Python 行列转换这几招真的很棒啊

多个字段爆炸

连续对多个字段实施爆炸的过程:

Python 行列转换这几招真的很棒啊

读者解疑

在这里回答一个读者的问题,数据采用模拟的形式。有下面的这样一份数据,需求:

每个shop下每个fruit在各自shop的占比

fruit = pd.DataFrame({  
    "shop":["shop1","shop3","shop2","shop3",  
            "shop2","shop1","shop3","shop2",  
            "shop3","shop2","shop3","shop2","shop1"],  
    "fruit":["苹果","葡萄","香蕉","苹果",  
             "葡萄","橘子","梨","哈密瓜",  
             "葡萄","香蕉","苹果","葡萄","橘子"],  
    "number":[100,200,340,150,  
              200,300,90,80,340,  
              150,200,300,90]})  
fruit  

Python 行列转换这几招真的很棒啊

首先我们是需要统计每个shop每个fruit的销量

Python 行列转换这几招真的很棒啊

方法1:多步骤

方法1采用的是多步骤解决:

1、每个shop的总销量

Python 行列转换这几招真的很棒啊

2、增加总和shop_sum列

Python 行列转换这几招真的很棒啊

3、生成占比

Python 行列转换这几招真的很棒啊

方法2:使用transform函数

Python 行列转换这几招真的很棒啊文章来源地址https://www.toymoban.com/news/detail-460290.html

到了这里,关于Python 行列转换这几招真的很棒啊的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 当Mysql缓慢时,这几招可解燃眉之急

    第一步定位问题源: 常见的以查询Mysql性能问题的方法 1.大部分的性能问题都是查询过慢的问题,可以查询慢sql日志。 通过慢查询日志定位那些执行效率较低的SQL语句,用–log-slow-queries[= file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文

    2024年02月03日
    浏览(37)
  • Adobe 观察 |最低工资标准来了,学会这几招,让加薪更简单

    最新调整后的全国各地区最低工资标准情况来了! 人力资源和社会保障部新发布的数据显示, 截至今年4月1日,共有15个地区第一档月最低工资标准在2000元及以上,分别是上海(2590元)、深圳(2360元)、北京(2320元)、广东(2300元)、江苏(2280元)、浙江(2280元)、河北

    2023年04月24日
    浏览(40)
  • 这几个ai写作生成器安利给大家

    小伙伴们,你们有没有遇到过需要写文章的困难?比如说,老板找你写一篇报告,但是又不知道从哪里下手;或者你想记录下一段经历,却不知道该用什么词汇来表达。别担心,现在市面已经有很多ai写作软件可以帮助我们自动化完成这些任务啦!不过现在大部分都不知道a

    2024年02月11日
    浏览(55)
  • 这几个ai写作生成器分享给大家

    大家知道吗,现在市场有许多ai写作软件,它们已经能够模仿人类的写作风格,帮大家轻松地生成文章。我对于非常感兴趣,于是就上网查了一下有可以ai写作的软件吗?结果真的找到几款不错的软件,今天借这个机会我将它们分享给你。 以下是今天分享的ai写作软件 一:A

    2024年02月15日
    浏览(57)
  • vue 数组转换成dataframe,在终端像python一样行列显示

    1 npm安装 2 导入 3 src目录下创建文件 pandas-js.d.ts 4 使用

    2024年02月13日
    浏览(39)
  • 程序员接私活还不知道这几个平台?那你真的亏了!

    程序员接私活现在已经是一个老生常谈的话题了,现在市面上各种程序员接单平台层出不穷,也参差不齐,有比较老牌的知名平台,也有比较好的新兴平台,如此多的平台就容易让人眼花缭乱,不知道该如何选择。 这期文章就带大家来了解几个比较热门的平台,涉及 国内外

    2024年01月16日
    浏览(68)
  • 行列转换.

    表abc: (建表语句在文章末尾) 想要得到: 方法一 with as应该是给查询出来的结果集表格起别名 方法二: 附建表语句:  

    2024年02月15日
    浏览(24)
  • SQL Server行列转换

    在使用SQL Server数据库的过程中我们经常会遇到需要将行数据和列数据相互转换显示的问题。对于这个问题SQL Server数据库有专门的内置函数PIVOT(行转列)、UNPIVOT(列转行)可以解决。下面我们就来分析一下这两个函数的使用方法。 1、语法 select * from 源表名 as 表别名 pivot( 聚合函

    2024年02月07日
    浏览(30)
  • Oracle 正则,开窗,行列转换

    基本格式:         ..... 函数() over([partition by 分组列,...][order by 排序列 desc|asc][定位框架]) 聚合函数 over()可以不强制要求写partition by 和Order by 查询从第一行到当前行的工资总和   over后面的括号中的unbounded  preceding表示第一行,current  row表示当前行。上面这段代码指的是

    2024年04月18日
    浏览(31)
  • spark中怎么实现行列转换

    在 Spark SQL 中,你可以使用 pivot 函数将行转换为列。 pivot 函数可以帮助你重新排列数据,将某些行值作为列,并根据指定的聚合函数对这些值进行汇总。以下是一个示例: 假设你有一个包含以下数据的表 sales_data : 现在,你想将 product 列中的值转换为列,可以按照 date 进行

    2024年04月13日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包