如何对于单元格数据进行清洗处理

如何对于单元格数据进行清洗处理

在这里插入图片描述

陪伴意味着有人愿意把最美好的东西给你,
那就是时间。
当然陪伴也是一个很平常的事情,
日复一日,年复一年。
到最后陪伴就成了一种习惯。
约定好的相逢,伴你天荒地老!
陪伴是最长情的告白!
——董卿 《朗读者》

需求分析

遇到好朋友提出这样一个帮忙的需求,主要功能是对Excel (.xlsx) 文件中的特定表格数据进行处理,并根据不同需求生成SQL更新脚本或保存处理后带有更新语句的新Excel文件。以下是详细的需求分析:

  1. 功能需求

    • 用户通过点击GUI上的按钮,可以选择需要处理的Excel文件。
    • 选定的Excel文件应该包含几列特定的数据,如“修改后的支撑人员名单”、“修改后的服务内容”和“修改后的输出成果物”,以及关联主键“did”。
    • 应用程序读取Excel文件并将数据加载至Pandas DataFrame中。
    • 对DataFrame的列名进行清理,去除额外的空格。
    • 根据DataFrame中的每个数据行生成相应的SQL更新语句,更新的目标表为SQL Server数据库中的[T_ZqProjectSatisfactionSurvey]表,更新字段与源Excel文件的特定列对应。
    • 用户可以选择两种不同的操作:
      a. 保存处理后的Excel文件:在原Excel文件基础上添加一列“修改语句”,记录生成的SQL更新语句,然后将整个带有更新语句的新DataFrame保存为新的Excel文件。
      b. 生成单独的SQL脚本文件:将所有生成的SQL更新语句写入一个单独的SQL文件,便于直接执行或者导入数据库进行批量更新。
  2. 非功能性需求

    • 界面友好:通过Tkinter提供的图形界面引导用户完成文件选择操作,同时有明确的操作提示信息。
    • 数据兼容性:仅支持读取和处理Excel文件(.xlsx格式)。
    • 错误处理:虽然代码未明确提及错误处理机制,但实际应用中应对文件读取失败、列名不存在或格式不符等情况作出适当处理。
  3. 操作流程

    1. 用户启动应用程序,看到一个窗口,窗口上有两个按钮:“请选择需要处理的文件”和“生成单独的SQL脚本”。
    2. 用户点击“请选择需要处理的文件”按钮后,弹出文件选择对话框,用户选择一个Excel文件。
    3. 根据用户的选择,应用程序将读取Excel文件,生成SQL更新语句,并按用户选择的操作类型执行相应功能(保存处理后的Excel文件或生成SQL脚本文件)。
    4. 系统会反馈给用户操作结果,告知其文件保存的路径或SQL脚本文件的生成路径。

核心源码

import pandas as pd
from tkinter import Tk, filedialog, Button
import warnings
warnings.filterwarnings
def select_file():
    # 创建 Tkinter 窗口
    root = Tk()
    root.withdraw()  # 隐藏 Tkinter 窗口

    # 弹出文件选择对话框
    file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])

    # 读取 Excel 文件
    data_origin = pd.read_excel(file_path)

    # 关闭 Tkinter 窗口
    root.destroy()

    # 返回 DataFrame 和文件路径
    return data_origin, file_path

def generate_sql_script(df, file_path):
    # 确保列名没有额外的空格或其他字符
    df.columns = df.columns.str.strip()

    # 生成 SQL 查询语句
    sql_script = df.apply(lambda row: f"""
        UPDATE [dbo].[T_ZqProjectSatisfactionSurvey]
        SET
            Zpss_SupportUser = '{str(row['修改后的支撑人员名单']).strip()}',
            Zpss_ServiceContent = '{str(row['修改后的服务内容']).strip()}',
            Zpss_InputResult = '{str(row['修改后的输出成果物']).strip()}'
        WHERE
            Zpss_id = {str(row['did']).strip().split('.')[0]};
    """, axis=1)

    # 将 SQL 脚本保存到文件
    script_file_path = file_path.replace(".xlsx", "_单独脚本.sql")
    with open(script_file_path, 'w', encoding='utf-8') as script_file:
        script_file.write('\n'.join(sql_script))

    print(f"SQL 脚本已保存到: {script_file_path}")

def process_data_and_save(df, file_path):
    # 确保列名没有额外的空格或其他字符
    df.columns = df.columns.str.strip()

    # 生成 SQL 查询语句并存储在 '修改语句' 列
    df['修改语句'] = df.apply(lambda row: f"""
        UPDATE [dbo].[T_ZqProjectSatisfactionSurvey]
        SET
            Zpss_SupportUser = '{str(row['修改后的支撑人员名单']).strip()}',
            Zpss_ServiceContent = '{str(row['修改后的服务内容']).strip()}',
            Zpss_InputResult = '{str(row['修改后的输出成果物']).strip()}'
        WHERE
            Zpss_id = {str(row['did']).strip().split('.')[0]};
    """, axis=1)

    # 输出结果
    print(df['修改语句'])

    # 保存处理后的 DataFrame 到新文件
    processed_file_path = file_path.replace(".xlsx", "_处理后.xlsx")
    df.to_excel(processed_file_path, index=False)
    print(f"处理后的数据已保存到: {processed_file_path}")

# 创建 Tkinter 窗口
root = Tk()
root.title("表格自动化处理")  # 设置窗口标题

# 设置窗口大小
root.geometry("400x200")

# 创建按钮
select_button = Button(root, text="请选择需要处理的文件", command=lambda: process_data_and_save(*select_file()), bg="blue", fg="black")
select_button.pack(pady=10)

generate_sql_button = Button(root, text="生成单独的SQL脚本", command=lambda: generate_sql_script(*select_file()), bg="green", fg="black")
generate_sql_button.pack(pady=10)

# 运行 Tkinter 事件循环
root.mainloop()

这段Python代码实现了一个基于Tkinter的简单桌面应用程序,用于从Excel文件中提取数据,并根据数据生成SQL更新脚本或更新后的Excel文件。具体来说,该程序包含以下几个部分:

  1. 导入所需库:

    • pandas 用于数据处理,尤其是读取和写入Excel文件。
    • Tkinter 是Python自带的标准GUI库,用于创建图形用户界面。
    • filedialog 是Tkinter的一个模块,用于弹出文件选择对话框。
  2. 定义函数:

    • select_file() 函数负责打开一个文件选择对话框让用户选择Excel文件,读取选定的Excel文件内容并将其转换为Pandas DataFrame,然后返回这个DataFrame以及文件路径。
    • generate_sql_script(df, file_path) 函数接收DataFrame和文件路径作为参数,对DataFrame的列名进行清理,然后为DataFrame中的每一行生成对应的SQL UPDATE语句,并将这些语句写入一个单独的SQL脚本文件中,文件名是在原Excel文件名的基础上添加了“_单独脚本.sql”后缀。
    • process_data_and_save(df, file_path) 函数也接收DataFrame和文件路径,同样对列名进行清理,但是它不是生成单独的SQL脚本文件,而是将生成的SQL更新语句添加到DataFrame的一列中(列名为“修改语句”),然后将这个包含了SQL更新语句的新DataFrame保存为一个新的Excel文件,文件名是在原Excel文件名基础上添加了“_处理后.xlsx”后缀。
  3. GUI构建:

    • 创建Tkinter窗口实例,并设置窗口标题为“表格自动化处理”。
    • 设置窗口大小为400x200像素。
    • 创建两个按钮:
      • “请选择需要处理的文件”按钮,点击时触发process_data_and_save()函数处理数据并保存处理后的新Excel文件。
      • “生成单独的SQL脚本”按钮,点击时触发generate_sql_script()函数生成SQL更新脚本并保存到文件中。
  4. 启动Tkinter的事件循环,使窗口保持运行状态,直到被关闭。

整个应用程序的主要目的是帮助用户快速地基于Excel表格中的数据生成针对特定数据库表(在这个例子中是T_ZqProjectSatisfactionSurvey)的UPDATE SQL语句,并提供了两种方式来保存这些生成的语句,一种是内嵌到一个新的Excel文件中,另一种是以单独的SQL脚本文件形式存在。

效果展示

在这里插入图片描述
处理前表格数据
在这里插入图片描述
处理后的表格数据
在这里插入图片描述
sql脚本文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446265.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多线程多进程处理服务器并发(多进程处理如何解决僵死进程)

目录 1.可循环发送数据的代码 2.改成循环之后每次发现只能处理一个客户端 3.服务器端处理并发问题 3.1 思路 3.2 利用多线程实现并发 ​编辑 3.3 利用多进程实现并发 3.3.1 多进程并发产生的僵死进程问题 ​3.3.2 解决僵死进程问题 1.可循环发送数据的代码 服务器代…

AI代码加速器即将发布!傅盛:程序员会写某种代码就能找到工作的时代一去不复返了

在产品介绍视频的最后,代码加速器运行了Prompt生成的代码,是一个为傅盛庆生的祝福“彩蛋”。不得不说,猎户星空的程序员就做到了傅盛说的不止写代码,真是有点浪漫小心机在身上的。 3月6日,猎豹移动董事长兼CEO、猎户星…

木球竞赛抽签计分系统(C# Winform)

前几天做了个小系统,木球竞赛抽签计分系统。种子的设置,和轮空的设置,都是按照运动抽签的规则。目前仅支持8位,16位, 32位,64位报表的生成。 功能模块: 1、比赛管理:名称、承办、时间、地点 2…

使用Certbot解决https证书自动更新的问题

除了各个第三方博客平台之外,我还一直保有一个自建的博客网站https://zxs.io/,还有几个其他的域名用做小工具之类的,之前一直使用阿里云免费https证书,一次申请可以用一年,但现在阿里云免费证书缩短到3个月了&#xff…

云上攻防-云产品篇堡垒机场景JumpServer绿盟SASTeleport麒麟齐治

知识点 1、云产品-堡垒机-产品介绍&攻击事件 2、云产品-堡垒机-安全漏洞&影响产品 章节点: 云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等 云厂商攻防:阿里云,腾讯…

【网络工程设计】交换网络技术

📝本文介绍 本文主要介绍使用GNS3和VMware来构件一个简单的交换网络 👋作者简介:一个正在积极探索的本科生 📱联系方式:943641266(QQ) 🚪Github地址:https://github.com/sankexilianhua &#x…

【MySQL篇】 MySQL基础学习

文章目录 前言基础数据类型DDL数据库操作查询数据库创建数据库删除数据库使用数据库 DDL表操作创建表查询表修改表删除 DML-增删改添加数据更改数据删除数据 DQL-查询基础查询条件查询聚合函数分组查询排序查询分页查询编写顺序 DML-用户及权限用户管理权限控制 函数字符串函数…

修复网络适配器不工作的14种方法,总有一种适合你

网络适配器是将设备连接到internet或其他计算机的关键硬件组件。如果设备发生故障,你可能会面临连接速度慢的问题,在最坏的情况下,互联网将完全停止工作。 这可能是由于损坏的驱动程序、冲突的设备、配置错误的设置,甚至是硬件故障!但也有可能出现互联网问题,使你认为网…

22.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-加载配置文件到分析工具界面

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:21.配置数据保存…

【java+vue】前后端项目架构详细流程

前端 1.创建vue项目 需要工具:node、Vscode 1.在磁盘上创建文件(web),并移到Vscode的工作区 2.进入该文件的终端 3.检测node和vue是否正常,若不显示版本号,则自行下载 4.生成vue 1.执行命令:…

JavaScript中的Set和Map:理解与使用

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2.JavaWebMySql基础

导语: 一、数据库基本概念 1.什么是数据库 2.关于MySql数据库 二、MySQL的安装与卸载 安装步骤: 卸载步骤: 三、MySQL服务操作 1.服务启动和关闭: 2.登录和退出MySQL: 3.服务自启动: 4.命令行登…

小程序Taro框架 自定义底部Tabbar,处理自定义Tab栏切换卡顿、闪烁

最终效果 最近在用Taro框架开发一个小程序,有一个自定义底部Tabbar的需求,最终效果如下 起步 这页是我第一次接触自定义小程序底部Tabbar,所有第一选择必然是相看官方文档:微信小程序自定义 Tabbar | Taro 文档 (如果…

ping多个IP的工具

Ping Tool 项目地址 python开发的IP搜索小工具 ping一个网段所有IP,显示结果查看某个ip地址开放监听的端口配置可保存

IDEA编译安卓源码TVBox

因为电视x受限,无法观看电视直播,为了春晚不受影响,于是网络一顿搜索,试过多个APP,偶尔找到这款开源的TVBox,寒假在家,随便拿来练练手,学习安卓APP的编写,此文做以记录&a…

手拉手RocketMQ基础

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: activ…

分享软件项目实施方案模板

本项目在实施过程中将遵守做到以下几个方面: 与建设单位共同完成整个系统软件、网络等设计,负责系统的开发、测试、调试、人员培训、系统的试运行和交付,并保证系统质量。负责系统的维护、应用软件的升级和更新。提出对系统硬件设备的相关技术要求。在项…

JDBC的学习记录

JDBC就是使用java语言操作关系型数据库的一套API。 JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的一种标准接口。它提供了一组方法和类,使Java程序能够与各种不同类型的关系型数据库进行交互。 JDBC的主要功能包括建…

PythonWeb

例题一 from flask import Flask app Flask(__name__) app.route(/index) def index():return f<h1>这是首页&#xff01;</h1> def second():return f<h1>这是第二页&#xff01;</h1> if __name__ __name__:app.run(host"0.0.0.0",port…

图腾柱PFC工作原理:一张图

视屏链接&#xff1a; PFC工作原理