百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

不会代码,也能批量数据合并,使用Python开发一个图形交互界面

itomcoil 2025-03-30 17:44 10 浏览

作为一名数据分析师,日报,周报,月报是少不了的,经常在整理周报或者月报的时候,需要将这周的数据或者该月的数据进行一个汇总,常规地做法是将每一天的数据进行重复地复制、粘贴。

显然,上面的方式不可取,会加重我们数据整理工作,有没有一种简便的方法?仅需鼠标点一点,即可完成数据合并,本文介绍Python数据合并、图形界面开发和Python打包,可解决上述问题。

示例工具:anconda3.7

本文讲解内容:图形界面开发,Python打包

适用范围:使用交互式命令一键批量数据合并

Python数据合并

如下我们有个需求,就是将四个季度的销售明细合并在一张表里,本文开发的小工具也是在解决数据批量数据合并的问题。

常规情况下,导入一个Excel数据,使用pd.read_excel命令即可,如下我们导入了其中销售明细第1季度的数据。

import pandas as pd
df=pd.read_excel(r'D:\系统桌面(勿删)\Desktop\订单销售数据\销售明细第1季度.xlsx')
df.head()

那么如何导入一个文件夹下所有的Excel数据呢?这里使用os.listdir()命令可以返回该文件夹下的文件目录,返回结果如下。

import os

new_path=r'D:\系统桌面(勿删)\Desktop\订单销售数据'
listdir=os.listdir(new_path)
listdir

['销售明细第1季度.xlsx', '销售明细第2季度.xlsx', '销售明细第3季度.xlsx', '销售明细第4季度.xlsx']

这样我们就有了一个思路,首先导入第一个Excel表,然后使用for循环遍历文件目录,使用pd.concat命令将同一个文件夹内的多个Excel表进行合并。

import pandas as pd
import os

new_path=r'D:\系统桌面(勿删)\Desktop\订单销售数据'
listdir=os.listdir(new_path)
df=pd.read_excel(new_path+'\\'+ listdir[0])#导入第一个数据表

for filename in listdir[1:]:
    dfi=pd.read_excel(new_path+'\\'+ filename) #导入除第一个数据表外其他数据表
    df=pd.concat([df,dfi],sort=False) #数据纵向合并
    
df.to_excel(new_path+'\\'+'数据合并.xlsx',index=False)

如下即为表格批量合并后的结果。

我们将上面的代码定义为一个combine函数,只要每次导入path的文件夹路径,即可将数据合并。

import pandas as pd
import os

def combine(path):
    new_path=path
    listdir=os.listdir(new_path)
    df=pd.read_excel(new_path+'\\'+ listdir[0])#导入第一个数据表
    for filename in listdir[1:]:
        dfi=pd.read_excel(new_path+'\\'+ filename) #导入除第一个数据表外其他数据表
        df=pd.concat([df,dfi],sort=False) #数据纵向合并
    df.to_excel(new_path+'\\'+'数据合并.xlsx',index=False)

Python图形界面开发

为了将代码的运行过程增加交互式操作,这里使用PySimpleGUI库开发一个图形界面,其中,layout用于自定义窗口布局,window用于定义整体的窗口界面,while True: 循环运行,当满足特定的"事件"时,则返回具体的"值",从而实现人机交互功能。

import PySimpleGUI as sg

#自定义窗口布局,一共是两行,第一行用于查找需要合并Excel的文件目录,第二行点击开始合并按钮进行合并
layout = [[sg.Text("请选择Excel文件所在目录:"),sg.Input(size=(25, 1), enable_events=True, key="文件路径"),sg.FolderBrowse(button_text="浏览文件"),],
          [sg.Button('开始合并', enable_events=True, key="开始"),]
         ]

window = sg.Window('批量数据合并:By大话数据分析', layout)#定义窗口

while True:  
    event, values = window.read()
    if event in (None,):
        break  #关闭用户界面
    elif event == "开始":
        if values["文件路径"]:
            print(values["文件路径"])
            sg.popup('数据合并已完毕!')
        else:
            sg.popup('请先输入Excel文件所在的路径!')

window.close()

如下将人机交互功能开发完毕,点击浏览文件,找到需要批量合并文件的文件夹目录,点击开始合并,即可输出结果,其中,values["文件路径"]输入的是需要合并Excel数据的文件路径,print打印出来的就是需要合并Excel数据的文件路径。

至此,Python图形界面开发完毕,之前定义了combine函数,当满足特定事件和值时,执行combine(values["文件路径"])命令,即可使用交互式命令,完成数据表合并。

import pandas as pd
import os

def combine(path):
    new_path=path
    listdir=os.listdir(new_path)
    df=pd.read_excel(new_path+'\\'+ listdir[0])#导入第一个数据表
    for filename in listdir[1:]:
        dfi=pd.read_excel(new_path+'\\'+ filename) #导入除第一个数据表外其他数据表
        df=pd.concat([df,dfi],sort=False) #数据纵向合并
    df.to_excel(new_path+'\\'+'数据合并.xlsx',index=False)

import PySimpleGUI as sg

#自定义窗口布局,一共是两行,第一行用于查找需要合并Excel的文件目录,第二行点击开始合并按钮进行合并
layout = [[sg.Text("请选择Excel文件所在目录:"),sg.Input(size=(25, 1), enable_events=True, key="文件路径"),sg.FolderBrowse(button_text="浏览文件"),],
          [sg.Button('开始合并', enable_events=True, key="开始"),]
         ]

window = sg.Window('批量数据合并:By大话数据分析', layout)#定义窗口

while True:  
    event, values = window.read()
    if event in (None,):
        break  #关闭用户界面
    elif event == "开始":
        if values["文件路径"]:
            combine(values["文件路径"])
            sg.popup('数据合并已完毕!')
        else:
            sg.popup('请先输入Excel文件所在的路径!')

window.close()

Python程序打包

交互式的命令开发完毕,如何分享给别人使用?或者是别人的电脑上没有安装Python也能正常使用数据合并功能?这里给大家介绍Python程序打包,使用虚拟环境进行打包,在命令行输入如下命令下载pipenv包。

#使用虚拟环境压缩
pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple

使用快捷键Win+R键,然后输入CMD,输入pipenv shell命令,进入虚拟环境,没有虚拟环境的话会自动建立一个。

#Win+R输入CMD,进入虚拟环境,没有虚拟环境的话会自动建立一个
pipenv shell

由于Python打包会将电脑安装的Python包全部打包,这里我们在虚拟环境中只安装Python程序涉及的模块,这样会减少打包的体积,注意xlrd==1.2.0下载低版本的包,默认安装的是高版本的,安装高版本的包在程序使用中会报错。

#只安装Python程序涉及的模块
pip install pandas xlrd==1.2.0 id-validator PySimpleGUI pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

将带有交互式命令的数据合并代码导出为.py文件,在命令行输入如下的打包命令,指定具体的路径即可打包。

#进行打包
pyinstaller -F -w C:\Desktop\combine.py

稍等几分钟,在Python的工作目录下看到一个dist文件,如果不知道自己的Python工作目录,可使用os.getcwd()命令查看。

该dist文件包含一个combine.exe程序。

双击combine.exe程序,在图形交互界面导入具体的文件路径即可完成数据合并,如果你对这个批量数据合并的小工具感兴趣,也想用于日常的批量表格数据合并,可以添加我后台的联系方式,免费获取。

三年互联网数据分析经验,擅长Excel、SQL、Python、PowerBI数据处理工具,数据可视化、商业数据分析技能,统计学、机器学习知识,持续创作数据分析内容,点赞关注,不迷路~

相关推荐

点过的网页会变色?没错,这玩意把你的浏览记录漏光了

提起隐私泄露这事儿,托尼其实早就麻了。。。平时网购、换手机号、注册各种账号之类的都会咔咔泄露,根本就防不住。但托尼真是没想到,浏览器里会有一个看起来完全人畜无害的功能,也在偷偷泄露我们的个人隐私,而且...

Axure教程:高保真数据可视化原型

本文将介绍如何制作Axure高保真数据可视化原型,供大家参考和学习。高保真数据可视化原型设计,称得上是Axure高阶水平。数据可视化在原型设计中是一个重要的分支,但是对于Axure使用者具有一定要求。...

Flutter web开发中禁用浏览器后退按钮

路由采用的go-router路由框架:finalrootNavigatorKey=GlobalKey<NavigatorState>();finalGoRouterrouter...

jQuery 控制属性和样式

标记的属性each()遍历元素:each(callback)方法主要用于对选择器进行遍历,它接受一个函数为参数,该函数接受一个参数,指代元素的序号。对于标记的属性而言,可以利用each()方法配合th...

微信小程序入门教程之二:页面样式

这个系列的上一篇教程,教大家写了一个最简单的Helloworld微信小程序。但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页...

如何在Windows11的任务栏中禁用和删除天气小部件图标?

微软该公司已在Windows11的任务栏中添加了一个天气小部件图标,作为小部件的入口点。这个功能与之前Win10上的新闻与资讯功能相同,但是有的用户不喜欢想要关闭,不知道如何操作,下面小编为大家带来...

CSS伪类选择器大全:提升网页交互与样式的神奇工具

CSS伪类选择器是前端开发中不可或缺的强大工具,它们允许我们根据元素的状态、位置或用户行为动态地应用样式。本文将全面介绍常用的伪类选择器,并通过代码示例展示其实际应用场景。一、基础交互伪类1.超链接...

7个Axure使用小技巧

编辑导读:对于Axure原型工具,很少有产品经过系统学习,一般都是直接上手,边摸索边学习,这直接导致很多快捷操作被忽视。笔者在日常工作中总结出以下小技巧,希望对各位有帮助。之前整理了2期Axure的...

JavaScript黑暗技巧:禁止浏览器点击“后退”按钮

浏览网页时,当从A页面点击跳转到B页面后,一般情况下,可以点击浏览器上的“后退”按钮返回A页面。如果进入B页面后,B页面想让访问者留下,禁止返回,是否可以实现呢?这简直是要控制浏览器的行为,虽然有些邪...

对齐PyTorch,一文详解OneFlow的DataLoader实现

撰文|赵露阳在最新的OneFlowv0.5.0版本中,我们增加了许多新特性,比如:新增动态图特性:OneFlow默认以动态图模式(eager)运行,与静态图模式(graph)相比,更容易搭建网...

Python计算机视觉编程 第一章 基本的图像操作和处理

以下是使用Python进行基本图像操作和处理的示例代码:使用PIL库加载图像:fromPILimportImageimage=Image.open("image.jpg"...

PyTorch 深度学习实战(31):可解释性AI与特征可视化

在上一篇文章中,我们探讨了模型压缩与量化部署技术。本文将深入可解释性AI与特征可视化领域,揭示深度学习模型的决策机制,帮助开发者理解和解释模型的内部工作原理。一、可解释性AI基础1.核心概念特征重要...

学习编程第177天 python编程 富文本框text控件的使用

今天学习的是刘金玉老师零基础Python教程第72期,主要内容是python编程富文本框text控件。一、知识点1.tag_config方法:利用某个别名作为标签,具体的对应标签的属性功能配置在后面参...

用Python讓電腦攝像頭實現掃二維碼

importsys#系統模組,用來存取命令列參數與系統功能importcv2#OpenCV,處理影像與相機操作importnumpyasnp#Numpy,用來處理數值與...

使用Transformer来做物体检测

作者:JacobBriones编译:ronghuaiyang导读这是一个Facebook的目标检测Transformer(DETR)的完整指南。介绍DEtectionTRansformer(D...