Python实现将横表和纵表任意转换的两种方法

 更新时间:2023年12月28日 10:18:30   作者:大话数据分析  
在日常做数据分析,接收到最多的表格是纵表,每个字段变量都有很长数据的长表,我们称之为纵向数据,但是,有时候,我们也会遇到横表,对于横向数据,我们会数据转化,将其转化为纵向数据,感兴趣的同学跟着小编一起来学习吧

我们日常做数据分析,接收到最多的表格是纵表,每个字段变量都有很长数据的长表,我们称之为纵向数据,但是,有时候,我们也会遇到横表,称之为横向数据,对于横向数据,我们会数据转化,将其转化为纵向数据进行数据处理,下面一起来学习。

示例工具:anconda3.7
本文讲解内容:pandas数据重塑
适用范围:在Python横表与纵表转化

动图封面

首先导入我们本次案例使用的横向数据,从这里看出,横向数据类似于Excel数据透视表得出的表,将''季度''这个字段拖入到列,就会得到横表。

导入横向数据如下,包含城市、年份等字段。

import pandas as pd  
 
wide_table=pd.read_excel(r'C:\Users\尚天强\Desktop\各城市销量横向数据.xlsx') 
wide_table

横表转纵表

横表转纵表这里介绍两种方法,一种是melt()方法,另一种是stack()方法,在melt()的参数中id_vars表示不需要被转换的列名,除此之外剩下的列全部都要转换,就不用写了,var_name和value_name是自定义设置对应的列名,转为长表的数据如下所示。

long_table=wide_table.melt(id_vars=["城市","年份"],var_name="季度",value_name="销售量") 
long_table=long_table.sort_values(by=["城市","年份","销售量"],ascending=False) 
long_table

使用stack()方法,首先将'城市','年份'设置为这组数据的索引,然后stack()将列索引转换为行索引,最后reset_index()重置索引,修改一下列名,即可的得到与上面一样的结果。

long_table=wide_table.set_index(['城市','年份']).stack().reset_index() 
long_table.columns=['城市','年份','季度','销售量'] 
long_table

纵表转横表

纵表转横表就是使用前面介绍的数据透视的方法,看看Python如何做数据透视,这里使用pivot_table(),与Excel数据透视表类似,index放入行值,columns放入列值,values放入计算的值,然后重置索引,即可得到横表的结果。

wide_table=long_table.pivot_table(index=['城市','年份'],columns='季度',values='销售量').reset_index() 
wide_table=wide_table[['城市','年份','第一季度','第二季度','第三季度','第四季度']] 
wide_table

除此之外介绍一个SQL语法创建数据透视表的方法,这里导入pandasql库,sum结合case when函数判断计算列值,然后group by进行分组,即可得出如下的结果。

import pandasql as sql 
 
sql.sqldf("""select 城市,年份,
              sum(case when 季度="第一季度" then 销售量 end) as "第一季度",
              sum(case when 季度="第二季度" then 销售量 end) as "第二季度",
              sum(case when 季度="第三季度" then 销售量 end) as "第三季度",
              sum(case when 季度="第四季度" then 销售量 end) as "第四季度" 
              from long_table
              group by 城市,年份
              order by 年份;""")

数据导出

本节的内容相对比较简单,熟练掌握纵表和横表的相互转化方法,以及数据透视的方法,可以让数据清洗变得尤为简单,数据表转换后赋值变量,然后导出,数据结果如下所示。

 table1=long_table
 table2=sql.sqldf("""select 城市,年份,
                     sum(case when 季度="第一季度" then 销售量 end) as "第一季度",
                     sum(case when 季度="第二季度" then 销售量 end) as "第二季度",
                     sum(case when 季度="第三季度" then 销售量 end) as "第三季度",
                     sum(case when 季度="第四季度" then 销售量 end) as "第四季度"
                     from long_table
                     group by 城市,年份
                     order by 年份;""")
 
#数据导出 
write=pd.ExcelWriter(r'C:\Users\尚天强\Desktop'+'\\Python转置结果'+'.xlsx')
 
table1.to_excel(write,sheet_name='Python横向转纵向',index=False) 
table2.to_excel(write,sheet_name='Python纵向转横向',index=False)
 
write.save()
write.close()

以上就是Python实现将横表和纵表任意转换的两种方法的详细内容,更多关于Python横表和纵表任意转换的资料请关注脚本之家其它相关文章!

相关文章

  • Python中的numpy数组维度扩展详解

    Python中的numpy数组维度扩展详解

    这篇文章主要介绍了Python中的numpy数组维度扩展详解,在numpy数组中,切片功能非常常用,例如x[:]表示取x的所有元素,可以通过在切片中增加None或者np.newaxis实现,它们的作用就是在相应的位置上增加一个维度,在这个维度上只有一个元素,需要的朋友可以参考下
    2023-09-09
  • 基于Python3编写一个GUI翻译器

    基于Python3编写一个GUI翻译器

    PySimpleGUI就是GUI工具包,用于创建GUI的。本文将利用PySimpleGUI编写一个GUI翻译器,感兴趣的小伙伴可以跟随小编一起动手尝试一下
    2022-08-08
  • Python时间获取及转换知识汇总

    Python时间获取及转换知识汇总

    这篇文章主要介绍了Python时间获取及转换知识汇总的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • 浅谈python图片处理Image和skimage的区别

    浅谈python图片处理Image和skimage的区别

    这篇文章主要介绍了浅谈python图片处理Image和skimage的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python numpy中对ndarry按照index增删改查

    python numpy中对ndarry按照index增删改查

    这篇文章主要介绍了python numpy中对ndarry按照index增删改查,在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始,接下来一起进入下面文章了解详细内容吧
    2022-02-02
  • 更新pip3与pyttsx3文字语音转换的实现方法

    更新pip3与pyttsx3文字语音转换的实现方法

    今天小编就为大家分享一篇更新pip3与pyttsx3文字语音转换的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python爬虫入门案例之爬取二手房源数据

    Python爬虫入门案例之爬取二手房源数据

    读万卷书不如行万里路,学的扎不扎实要通过实战才能看出来,今天小编给大家带来一份python爬取二手房源信息的案例,可以用来直观的了解房价行情,大家可以在过程中查缺补漏,看看自己掌握程度怎么样
    2021-10-10
  • Python中异常处理用法

    Python中异常处理用法

    这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下
    2021-11-11
  • Python数据处理之pd.Series()函数的基本使用

    Python数据处理之pd.Series()函数的基本使用

    Series是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据,轴标签统称为索引,下面这篇文章主要给大家介绍了关于Python数据处理之pd.Series()函数的基本使用,需要的朋友可以参考下
    2022-06-06
  • python实现棋盘覆盖问题及可视化

    python实现棋盘覆盖问题及可视化

    这篇文章主要给大家介绍了关于python实现棋盘覆盖问题及可视化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论