Python数据预处理小工具开发:基于PySimpleGUI的GUI实现与自动化处理
本文详细介绍如何使用Python结合PySimpleGUI和Pandas库开发一款数据预处理小工具。通过构建图形用户界面,实现Excel文件的读取与预览,并自动化处理重复值、缺失值及异常值。文章涵盖界面布局设计、核心代码解析、数据处理逻辑及使用PyInstaller打包成可执行文件的全过程,旨在提供一键完成数据清洗的实用方案。
在利用Python进行数据处理与分析的常规流程中,导入各类依赖库后,首要步骤是对数据进行预览,以排查是否存在缺失值、重复值等异常情况,并随即进行相应的处理。

本文将结合GUI工具PySimpleGUI,演示如何制作一款专属的数据预处理小工具,使数据处理过程实现自动化。最终运行效果如下图所示:

本文内容将分为以下三个部分进行讲解:
- 制作GUI界面
- 数据处理讲解
- 打包与测试
本工具主要涉及以下Python模块:
- PySimpleGUI
- pandas
- matplotlib
一、GUI界面制作
开发思路
遵循惯例,先阐述开发思路再提供代码。使用PySimpleGUI构建界面主要包含以下四个标准流程:
引入模块 ==> 创建元素并填充layout ==> 创建窗体 ==> 创建事件循环
从界面元素的角度分析,根据设计图可知,我们需要包含一个用于显示使用说明的菜单栏、一个视觉上呈现凹陷效果的数据预处理框架、框架内的3个单选按钮、用于读取文件路径的3个元素(固定文本标签、输入框、浏览按钮)以及“查看”、“处理”和“关闭”三个功能按钮。
从整体布局来看,窗体内的所有元素需呈现居中对齐状态,而菜单栏则固定在窗体边缘靠左位置。整体采用行衔接式的分布结构。
从交互事件的角度看,我们需要在使用说明菜单中添加用户需注意的事项。对于文件读取功能,我们设定支持两种常用的数据存储格式(“.xlsx”和“.xls”)的Excel文件。
读取文件后,用户在数据预处理框架中选择一种处理方式。随后,可以针对每种错误类型弹出提示框进行查看,确认无误后再对数据进行最终处理。
处理过程要求将处理后的数据覆盖原始数据文件。整个过程必须是持续且不间断的。这里提供一个建议:每次数据分析之前最好对原始数据进行备份,以防止分析过程中出现失败且无法找回原始数据文件的尴尬情况。
代码实现
在了解上述思路后,是否感到跃跃欲试?接下来我们实现具体代码。先展示完整代码,随后进行详细拆解:
import PySimpleGUI as sg
import pandas as pd
import matplotlib
matplotlib.use("TkAgg")
sg.ChangeLookAndFeel('GreenTan')
menu_def = [['&使用说明', ['&注意']]]
layout = [
[sg.Menu(menu_def, tearoff=True)],
[sg.Frame(layout=[
[sg.Radio('重复值处理', "RADIO1",size=(15,1),key="dup"), sg.Radio('缺失值处理', "RADIO1",size=(15,1),key="mis"), sg.Radio('异常值处理', "RADIO1",default=True,key="war")]], title='数据预处理',title_color='green',title_location='n',relief=sg.RELIEF_SUNKEN, tooltip='选择其中一种处理方式' )],
[sg.Text('文件位置', size=(8, 1), auto_size_text=False, justification='right'),
sg.InputText(enable_events=True,key="lujing"), sg.Button('浏览',key = 'getf')],
[sg.Button('查看',key = 'look'),sg.Submit('处理',key = 'handle'), sg.Cancel('关闭')]]
window = sg.Window('特征工程', layout, default_element_size=(40, 1), grab_anywhere=False)
while True:
event, values = window.read()
if event == 'getf':
text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件',file_types = (("Excel Files", "*.xlsx"),("Excel Files", "*.xls"),))
sg.popup('提示', '是否确认选择文件---', text)
window['lujing'].update(text)
if event == "look":
'''
用户点击查看按钮促发的事件
'''
if event == "handle":
'''
用户点击处理按钮促发的事件
'''
if event == "Cancel" or event == sg.WIN_CLOSED:
break
if event == "注意":
'''
注意事项编写
'''
代码解释
一旦理清了开发思路,你会发现实现过程变得相对简单。接下来将详细讲解相关参数的作用。
首先是matplotlib.use("TkAgg"):调用此函数旨在使用matplotlib模块,其目的是在查看异常值处理(如箱型图展示)时改变图像的显示方式,具体为使用TkAgg作为交互式后台。
所谓交互式后台,意味着用户可以对生成的图像进行任意操作,包括区域放大缩小、数值查看等功能。
调用该函数的原因有二:首先,GUI界面需要具备良好的交互感;其次,当数据量较大时,箱型图可能会显示得较小,使用交互式后台有助于更清晰地查看细节。
其次是sg.ChangeLookAndFeel('GreenTan'):此代码用于改变窗体的整体配色风格。
menu_def定义了菜单栏,使用【“”,【“”】】这种格式来定义主菜单栏和子菜单栏。tearoff参数用于在每个字段之间添加一条虚线间隔,提升视觉体验。
sg.Frame():该元素与sg.columns()用法类似,主要用于容纳多个子元素。此处设置了relief参数,使框架在视觉上呈现凹陷效果。tooltip参数则定义了鼠标悬停在框架上时显示的小提示框内容。
title_location参数的用法较为独特,用于设置标题字符串的位置,支持(n,s,e,w,se等)选项。与其他元素布局位置设置不同,它是以地理位置坐标作为子参数来定位的。
sg.Radio:单选选项框,需将所有单选选项框的group_id参数设置为相同的值,才能在三个选项中互斥选择一个。此处我们以"RADIO1"作为group_id。
sg.Button():在GUI中我们使用了4个按钮,其中包含一个专用的Cancel(取消)按钮。
sg.popup():这是一个基础的弹出框元素,用于显示提示类的关键信息。
sg.popup_get_file():这是一个高级弹出框元素,提供带有文本输入字段和浏览按钮的窗口,方便用户选择文件。效果如下图所示:

二、数据预处理
GUI部分完成后,接着讲解数据处理部分,主要涵盖对重复值、缺失值和异常值的处理。
数据准备
本例使用的是2020年10月28日A股的行情数据。数据部分展示如下:

从展示数据中可以看到,其中包含重复的行以及存在缺失值的区域。
重复值处理
对于二维列表DataFrame而言,使用Pandas模块是最方便且最具办公简洁化的方式。
import pandas as pd
df = df.read_excel('文件绝对路径')
imfor = df[df.duplicated()]
imfor = str(imfor)
首先调用Pandas模块并读取文件路径。这里采取绝对路径而非相对路径的原因是,后续打包生成的GUI程序不依赖外部文件,而是依靠Python自带的环境,因此相对路径无法被正确识别。
df[df.duplicated()]是Pandas内的一个函数,以二维列表形式打印出重复值对应的行。此处将df变量转换为str字符串形式,是因为在后续GUI中使用弹出窗口元素时,需要以字符串形式加载内容。
最终处理重复值的方法如下:
df = df.drop_duplicates(inplace = True)
代码仅有一行,却能删除整个数据表中的重复值,这体现了Pandas函数的强大之处。
至于为什么使用inplace = True,是因为删除函数本身并不改变原表格结构,因此需要将新表覆盖原来的表格。
缺失值处理
先查看代码,关于缺失值处理,我在一年前曾写过相关文章,点击查看。
import pandas as pd
df = df.read_excel('文件绝对路径')
#df.isnull()
imfor1 = df.isnull().sum()
#df.isnull().any()
imfor1 = str(imfor1)
对于包含缺失值的数据表,可以使用df.isnull()或df.isna()来查看空值。该函数的作用是判断是否为空值,若为空值则返回True,否则返回False。
这里我们使用df.isnull().sum()来统计每一列字段的缺失值数量。如果数据量较大,还可以使用df.isnull().any()来查看仅包含缺失值的行。
解决方法方面,处理缺失值的方法有多种,包括取均值、取中位数、删除、取下方值等。本例采用取上方值的方法来填补空缺。
df = df.fillna(method='pad')
异常值处理
所谓异常值,是指在数字字段中出现的一个或多个不合群的数值。例如,在一列均为个位数的数字列中出现了一个百位数,这个百位数即为异常值。
使用Python检测异常值主要有两种方法:箱线图观察和标准差观察。本例选择箱线图观察法。
箱线图是用于显示所选数据分散情况的统计图,通过设定标准,将大于或小于箱线图上下限的数值表示为异常点。

如图所示,下四分位数指的是样本中有百分之25的数据小于这个数,记为Q1。上四分位数指的是样本中有百分之25大于这个数,记为Q3。上四分位数和下四分位数的差值的1.5倍加上上四分位数即为上边缘,反之计算下边缘。

import pandas as pd
df.boxplot()

打包与效果展示
在完成全部代码编写后,我们可以使用pyinstaller进行打包。
假定你的程序命名为yuchuli.py,在cmd窗口输入特定命令即可完成打包。
pyinstaller -F yuchuli.py
打包后,exe文件位于Python文件所在文件夹的dist文件夹中。我们启动程序来看下效果:



可以看到,我们需要的数据预处理的三个功能:重复值、缺失值、异常值都能按照指定方式进行处理!
当然,你可以在本文提供的方法基础上,自行进行修改,来定制一款符合你平时习惯的数据预处理小软件!
到此这篇关于使用Python制作一个数据预处理小工具(多种操作一键完成)的文章就介绍到这了,更多相关Python数据预处理小工具内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













