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

news2024/11/18 2:35:16

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

在这里插入图片描述

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

需求分析

遇到好朋友提出这样一个帮忙的需求,主要功能是对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脚本文件
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git分支管理(Git分支的原理、创建、切换、合并、删除分支)

系列文章目录 文章一:Git基本操作 文章目录 系列文章目录前言一、Git分支是什么二、Git分支的原理三、创建分支四、切换分支五、合并分支六、删除分支 前言 在上一篇文章中,我们学习了如何使用Git的一些基本操作,例如安装Git、创建本地仓库…

Unity使用Addressable热更新

先看热更新的gif: Addressable是Unity推出的打ab包方案。不需要手动写AB打包脚手架了,不需要关心依赖,这也简化了ab热更新的流程。Addressable打包需要先将资源放入group中,按group来打包,每个group对应一个ScriptableObject的配置…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节:铰链(类似门轴) 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体(拖动即可) 固定一般是等待一个断裂力,造成四分五裂的效果。 物理材质 设置摩檫力,则可以创造冰面的…

【算法面试题】-04

执行时长 def min_execution_time(n, size, tasks):a 0ans sizei 0while i < size:tmp tasks[i]a tmpif a < n:a 0else:a - ni 1ans a // nif a % n ! 0:ans 1return ans# 读取输入 n int(input()) size int(input()) tasks list(map(int, input().split()))…

macOS14.4安装FFmpeg及编译FFmpeg源码

下载二进制及源码包 二进制 使用brew安装ffmpeg : brew install ffmpeg 成功更新到ffmpeg6.1 下载FFmpeg源码

SMART PLC自适应低通滤波器(收放卷线速度滤波)

一阶低通滤波器更多内容请参考信号处理专栏相关文章,常用链接如下: 1、SMART PLC 低通滤波器和模拟量采集应用 https://rxxw-control.blog.csdn.net/article/details/136595982https://rxxw-control.blog.csdn.net/article/details/1365959822、SMART PLC双线性变换和后向差…

实拆一个Philips剃须刀

拆卸难度很大&#xff0c;怪不得防水 FR&#xff1a;徐海涛(hunkXu)

【Prometheus】DataModel

数据模型 DataModel 指标 Metric metric 包含 metric name 和 metric label 格式&#xff1a; <metric name>{<label name><label value>, ...}例如&#xff1a;服务器 HTTP 接口 /messages 的总请求数 api_http_requests_total{method"POST",…

算法第二十六天-删除有序数组中的重复项Ⅱ

删除有序数组中的重复项 题目要求 解题思路 题目要求中提到原地修改&#xff0c;那么肯定需要一个指针指向当前即将放置元素的位置&#xff0c;需要另外一个指针向后遍历所有元素&#xff0c;所以[双指针]解法呼之欲出。 慢指针slow&#xff1a;指向当前元素放置的位置&…

旅游资源网站|基于SSM 框架+vue+ Mysql+Java+B/S架构技术的旅游资源网站设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 管理员功能 用户功能模块 数据库设计 系统结构设计 lunwen参考 概述 源码获取 文末获取源码 前台首页功能 旅游资源网站 &#xff0c;在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理…

【AI辅助研发】-趋势:大势已来,行业变革

【AI辅助研发】-趋势&#xff1a;大势已来&#xff0c;行业变革 引言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;技术已逐渐渗透到各行各业&#xff0c;其中软件研发行业更是受益匪浅。AI辅助研发已成为大势所趋&#xff0c;不仅提高了软件开发的效…

toB开发范式

前言 B端开发&#xff0c;也被称为后台开发或者企业级开发&#xff0c;是针对企业或者组织的业务需求进行的软件开发。在 B 端开发中&#xff0c;我们通常关注的是系统的功能性、稳定性、可扩展性以及安全性&#xff0c;从面向过程编程 -> 面向对象编程 组合式编程 以下是…

蓝桥杯练习系统(算法训练)ALGO-981 过河马

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后&#xff0c;这匹马表示它不开心了……   于是&#xff0c…

21 卷积层里的多输入多输出通道【李沐动手学深度学习v2课程笔记】

目录 1. 多输入输出通道&相应代码实现 1.1 多输入 1.2 多输出 1.3 1x1 卷积层 1.4 小结 1. 多输入输出通道&相应代码实现 1.1 多输入 为了加深理解&#xff0c;我们实现一下多输入通道互相关运算。 简而言之&#xff0c;我们所做的就是对每个通道执行互相关操作&a…

YOLOv8原创二次改进DCNv3结构:即插即用|使用纯pytorch代码实现,不需要CUDA编译,并针对YOLOv8专门优化模块,基于可变形卷积的超强变种

💡本篇内容:YOLOv8原创改进DCNv3结构:即插即用|使用纯pytorch代码实现,不需要CUDA编译,并针对YOLOv8专门优化模块,基于可变形卷积的超强变种,优势:不需要编译! 💡附改进源代码及教程,用来改进🚀 DCNv3可变形网络结构 VisDrone有效涨点 关键词:DCNv3网络改进…

GTH手册学习注解

CPLL的动态配置 终于看到有这个复位功能了 QPLL SWITCHing需要复位 器件级RESET没发现有管脚引出来 两种复位方式&#xff0c;对应全复位和器件级复位 对应的复位功能管脚 改那个2分频的寄存器说明段&#xff0c;复位是自动发生的&#xff1f;说明可能起效了&#xff0c;但是分…

数字化转型导师坚鹏:基于湖北产业的科技金融创新模式与案例研究

基于湖北产业政策的科技金融创新模式与案例研究 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融有哪些创新模式&#xff1f; 课程特色&#xff1a; 有…

【linux进程信号】信号的产生

【Linux进程信号】信号的产生 目录 【Linux进程信号】信号的产生信号概念生活中的信号技术应用角度的信号注意信号概念用kill -l命令可以察看系统定义的信号列表信号处理常见方式概览 产生信号通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号由硬件异常产生信…

Pr 模版字体无法修改,始终是红色,解决办法?

1.问题如图所示&#xff1a; 2.【解决办法】&#xff1a;关闭PR&#xff0c;将PR切换为英文&#xff0c;然后重新打开PR&#xff0c;使用该模版就不会出现类似的问题。 具体操作可以参考这篇文章&#xff1a; https://blog.csdn.net/qq_42393720/article/details/128277352

picGo 图床配置 - gitee

记录一下&#xff0c;怕忘记了 PicGo 下载安装 官网下载地址 从下面随意复制一个链接到浏览器上打开 我下载的是.exe版本的&#xff0c;你可以选择自己想安装的方式 安装完之后打开就是这个样子 配置PicGo 首先安装这个插件 安装完之后会有一个gitee&#xff0c;点击&#xff…