利用Python的pandas数据处理包将宽表变成窄表
作者:Joy_joye 时间:2021-07-28 20:00:11
前言
工作中经常会使用到将宽表变成窄表,例如这样的形式
编号 | 编码 | 单位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
标签:Python,pandas,数据,处理
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
php随机取mysql记录方法小结
2023-11-22 22:27:22
Python OpenCV形态学运算示例详解
2022-03-04 12:23:39
![](https://img.aspxhome.com/file/2023/3/92123_0s.jpg)
python中@contextmanager实例用法
2021-07-18 18:19:11
Python脚本传参数argparse模块的使用
2023-02-28 23:07:21
![](https://img.aspxhome.com/file/2023/4/97724_0s.png)
用Python编写一个漏洞验证脚本
2022-03-23 02:30:43
![](https://img.aspxhome.com/file/2023/5/79775_0s.jpg)
python创建线程示例
2021-07-21 00:20:37
Appium自动化测试中获取Toast信息操作
2022-05-12 07:10:48
![](https://img.aspxhome.com/file/2023/5/99475_0s.png)
Python基于回溯法子集树模板实现图的遍历功能示例
2021-10-29 15:20:31
![](https://img.aspxhome.com/file/2023/9/102829_0s.jpg)
python-for x in range的用法(注意要点、细节)
2022-11-12 22:40:49
![](https://img.aspxhome.com/file/2023/8/100978_0s.png)
Python实现五子棋人机对战 和人人对战
2023-01-14 07:59:52
Python参数解析器configparser简介
2021-04-22 02:23:31
![](https://img.aspxhome.com/file/2023/1/95781_0s.png)
Tornado 多进程实现分析详解
2022-06-13 20:51:56
django 使用 request 获取浏览器发送的参数示例代码
2023-07-26 15:04:44
oracle移植到mysql注意事项
2008-12-25 13:09:00
浅谈keras中的目标函数和优化函数MSE用法
2022-01-19 02:15:55
Laravel实现批量更新多条数据
2023-10-23 03:23:03
![](https://img.aspxhome.com/file/2023/3/55533_0s.png)
网站数据库,是选SQL Server还是Access好
2008-05-23 13:19:00
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2021-12-14 00:54:08
pandas 如何保存数据到excel,csv
2021-05-12 13:05:22
如何正确显示模式对话框showModalDialog中的中文?
2010-06-28 18:24:00