• 使用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!

    1. import pandas as pd
    2. import numpy as np
    3. import os

    2.加载数据并显示。常规操作。

    1. data=pd.read_excel('test.xls')
    2. data.head()

    自己的测试数据存在test.xls中,这个文件存储在路径不必考虑,直接将原始存储的文件在jupyter中点upload上传到里根目录里就可以。

     显示出来的,结果如图所示。

     

    3.关键操作,将宽表转换为窄表。

    1. pd.set_option('display.max_rows', None)
    2. df=pd.melt(data,id_vars="结算编码",var_name="单位",value_name="数量")
    3. df.head()

    显示结果如下, 可以看到数据显示不全,还有空值,需要进一步进行处理操作。

     4.对空值进行处理。

    1. pd.set_option('display.max_rows', None)
    2. #删除所有值为空的行
    3. df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
    4. #how字段可选有any和all,any表示只要有空值出现就删除,all表示全部为空值才删除;inplace字段表示是否替换掉原本的数据
    5. #删除所有值为空的列
    6. df.dropna(axis="columns",how="all",inplace=False)
    7. df.dropna()

    处理后的结果可以看到,数据显示齐全,并已过滤处理掉了空值。 

     5.导出存储到Excel中。

    1. file_dir = 'D:/program/write/'
    2. exists = os.path.exists(file_dir)
    3. if not exists:
    4. os.makedirs(file_dir)
    5. df["结算编码"] = df["结算编码"].astype(str) #设置单元格格式
    6. df.dropna().to_excel(os.path.join(file_dir,"result3.xlsx"), sheet_name="处理结果")

    处理后的存储结果。

     结论:Python对数据处理分析真的操作简单高效,后续可以多多尝试使用Python来简化办公繁杂的程序,提升工作效率。

  • 相关阅读:
    nodejs+vue快递管理服务系统elementui
    MySQL 创建用户并设置权限
    一文读懂mysql的索引
    JavaScript:canvas图像操作
    Postman如何做接口测试
    clip studio paint插件开发之服务套件(四)
    【夜读】提升生活品质的8个建议
    React从脚手架开始搭建项目
    EFK部署centos7.9(四)Filebeat 部署
    【洛谷 P1097】[NOIP2007 提高组] 统计数字 题解(向量+排序)
  • 原文地址:https://blog.csdn.net/weixin_40165004/article/details/126873878