前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python自动化】python解决表格整理

【Python自动化】python解决表格整理

作者头像
天道Vax的时间宝藏
发布2021-08-11 15:34:50
5680
发布2021-08-11 15:34:50
举报

工作的具体内容是需要把一个二维表格转成一维表格。将问题简化抽象,大致是这么个意思(数据为示例):

原表格

图片
图片

新表格

图片
图片

这问题简单啊,强大的pandas库一定可以搞定!于是我简单网上搜索了一下,就找到函数和参考样例了。而且仅用三行代码就搞定了,惊得朋友直呼python好家伙!

下面给大家详细介绍一下整个过程。

1.正确读取表格

首先按照传统的方式读表格:

代码语言:javascript
复制
import pandas as pd
data1 = pd.read_excel('高中生数量.xlsx')
data1
图片
图片

发现索引列没有被识别,产生了Unnamed: 0列,所以我们应该把第一列设置为索引列,代码如下:

代码语言:javascript
复制
import pandas as pd
data1 = pd.read_excel('高中生数量.xlsx',index_col=0)  #index_col用来设置索引列
data1
图片
图片

这样就正常读取并识别表格了

2.重置索引

这一步主要是将索引列重置,变为普通列,便于下步,代码如下

代码语言:javascript
复制
data2=data1.reset_index()
data2
图片
图片

可以发现,之前的索引列变成‘index’列了

3.将列名转换为列数据

这一步是整个工作的关键步骤,主要用到pandas的melt函数。melt是逆转操作函数,可以将列名转换为列数据(columns name → column values),重构DataFrame,用法如下:

代码语言:javascript
复制
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数解释:

frame:要处理的数据集;id_vars:不需要被转换的列名;value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了;var_name和value_name是自定义设置对应的列名;col_level :如果列是MultiIndex,则使用此级别。

我们把'index'列保留,并把转换后的列命名为'year',value命名为'stu_num':

代码语言:javascript
复制
data3=data2.melt(id_vars='index', var_name='year',value_name='stu_num')
data3
图片
图片

4.把第一列设置为索引列

为了防止保存后的表格带有数字索引,需要把第一列设置为索引列:

代码语言:javascript
复制
data4=data3.set_index('index')
data4
图片
图片

5.保存表格

代码语言:javascript
复制
data4.to_excel('转换后表格.xlsx')

大功告成,上述代码可以用1行代码搞定:

代码语言:javascript
复制
data=data.reset_index().melt('index', var_name='col').set_index('index')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.正确读取表格
  • 2.重置索引
  • 3.将列名转换为列数据
  • 4.把第一列设置为索引列
  • 5.保存表格
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档