利用Python的pandas数据处理包将宽表变成窄表
作者:Joy_joye 发布时间:2021-07-28 20:00:11
标签:Python,pandas,数据,处理
前言
工作中经常会使用到将宽表变成窄表,例如这样的形式
编号 | 编码 | 单位1 | 单位2 | 单位3 | 单位4 | ... | ... | ... | ... | ... | ... |
1 | 编码1... | 数量... | 数量... | 数量... | 数量... | ... | ... | ... | ... | ... | ... |
2 | 编码2... | 数量... | 数量... | 数量... | 数量... | ... | ... | ... | ... | ... | ... |
然而工作中,这样查看数据不够方便,往往需要窄表的形式,如下:
编码 | 单位 | 数量 |
编码1 | 单位1 | 数量1 |
编码2 | 单位2 | 数量2 |
编码3 | 单位3 | 数量3 |
...... | ...... | ...... |
尝试使用Excel中的lookup函数进行填充,较为麻烦还不能直接实现功能,刚好在自学Python,就查阅了资料,看看能不能使用Python强大的数据处理功能来实现这个需求。
pandas简介:pandas=pannel data+ data analysis;最初被作为金融数据分析工具而开发出来的,pandas为时间序列分析提供了很好的支持。同是也能够灵活处理缺失数据,为数据分析操作提供了更为便捷的手段。
话不多说,直接上jupyter代码。
1.引入包
供处理分析使用,这步so easy!
import pandas as pd
import numpy as np
import os
2.加载数据并显示。常规操作。
data=pd.read_excel('test.xls')
data.head()
自己的测试数据存在test.xls中,这个文件存储在路径不必考虑,直接将原始存储的文件在jupyter中点upload上传到里根目录里就可以。
显示出来的,结果如图所示:
3.关键操作,将宽表转换为窄表
pd.set_option('display.max_rows', None)
df=pd.melt(data,id_vars="结算编码",var_name="单位",value_name="数量")
df.head()
显示结果如下, 可以看到数据显示不全,还有空值,需要进一步进行处理操作。
4.对空值进行处理
pd.set_option('display.max_rows', None)
#删除所有值为空的行
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
#how字段可选有any和all,any表示只要有空值出现就删除,all表示全部为空值才删除;inplace字段表示是否替换掉原本的数据
#删除所有值为空的列
df.dropna(axis="columns",how="all",inplace=False)
df.dropna()
处理后的结果可以看到,数据显示齐全,并已过滤处理掉了空值。
5.导出存储到Excel中
file_dir = 'D:/program/write/'
exists = os.path.exists(file_dir)
if not exists:
os.makedirs(file_dir)
df["结算编码"] = df["结算编码"].astype(str) #设置单元格格式
df.dropna().to_excel(os.path.join(file_dir,"result3.xlsx"), sheet_name="处理结果")
处理后的存储结果:
结论:Python对数据处理分析真的操作简单高效,后续可以多多尝试使用Python来简化办公繁杂的程序,提升工作效率。
来源:https://blog.csdn.net/weixin_40165004/article/details/126873878


猜你喜欢
- 以下操作演示都是基于mysql5.6.36版本:工作中经常遇到这样的问题:mysql数据访问能量很大,想要从sql方面优化。研发经常会问到能
- Serilog是.net下的新兴的日志框架,本文这里简单的介绍一下它的用法。首先安装Nuget包:Install-Package Seril
- 一、回顾一下前面《Oracle开发之窗口函数》中关于全统计一节,我们使用了Oracle提供的:sum(sum(tot_sales)) ove
- 根据网上的一些说法,在python里获取ms级系统时间可以通过以下方式获取:import datetimeprint(datetime.da
- 1、下载MySQL官方的mysql-connector-python-8.0.17-py3.7-windows-x86-64bit.msi,
- 一、前言本次安装tensorflow是基于Python的,安装Python的过程不做说明(既然决定按,Python肯定要先了解啊):本次教程
- SQL查询输出,根据表内某字段为准,输出不重复记录,或删除掉重复的记录,保留所需要的记录。今儿见一朋友在蓝色里问起(查询不重复记录~),想想
- 我们之前一直都在使用的urlopen,这是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的urlopen()方法不支持代理、c
- mysqld_safe脚本执行的基本流程:1、查找basedir和ledir。2、查找datadir和my.cnf。3、对my.cnf做一些
- 相信认真做过网页设计(Web Design),或者关注过页面设计的同行都对“空格”不陌生。“空格”属于一类细节,很容易被忽略,但又比较影响效
- 直接搭建网络必须与torchvision自带的网络的权重也就是pth文件的结构、尺寸和变量命名完全一致,否则无法加载权重文件。此时可比较2个
- 在进行数据库的查询时,会经常遇到这样的情况:例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例
- 用for循环和海龟绘图实现漂亮的螺旋线A.课程内容本节课通过绘制复杂的螺旋线来深入学习for循环和range()函数的用法。深入了解循环的程
- 本文实例讲述了Python实现使用request模块下载图片。分享给大家供大家参考,具体如下:利用流传输下载图片# -*- coding:
- 前端技术层(图片有点偏激,仅供参考)Javascript和DOM关系很暧昧,弄不明白!CSS和HTML
- queue介绍queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue。python
- 查看数据库状态:service mysqld status 启动数据库:service mysqld start&
- 一、什么是NumPyNumpy--Numerical Python,是一个基于Python的可以存储和处理大型矩阵的库。几乎是Python
- 前言废话滑块验证码破解是一直都想搞的项目,毕竟多数网站都会采用滑块验证码,于是最近在修改论文的闲暇之余把这事儿给解决了。要搞现在的滑块验证码
- 在进行matplotlib画图的时候,经常会出现这个的报错,虽然知道是因为没有对应的字体的原因,但是,将字体下载后放到目标路径下,仍然没有办