【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
问题描述
在处理一个数据收集工作任务上,收集到的数据内容格式都不能直接对应到数据库中的表格内容。
比如:
第一种情况:服务名作为第一列内容,然后之后每一列为一个人名,1:代表此人拥有这个服务,0:代表不拥有。

第二种情况:服务名称为第一列,第二列紧跟人名,并均有重复的情况。

** 以上两种情况,都需要转换为 Name所对应的Services数据(多个Services用逗号连接在一起)。
由于数据量大,如果人工处理,工作量非常巨大,机械性,重复且易出错。于是,借助Python Pandas,短短几句代码就可以实现!
问题解答
1: 通过引入 pandas 组件,读取CSV文件
import pandas as pddf = pd.read_csv('service.csv')
2:第一种情况:使用双层 for 循环
- 第一层循环文件中的全部列,并且增加一个“行索引” rowIdx ,用于标记并获取当前行所代表的Service名称
- 第二层循环列中的每一个单元格,判断值是否等于1,相等则取出Service名并进行追加
- 第二层循环完成后,对 services 字符串的最后一个逗号进行清除
- 根据固定格式,正常UPDATE SQL语句
for column in df.columns:
services =""
rowIdx =0 for value in df[column]:
if value ==1.0:
services += df['Services'][rowIdx] + ","
rowIdx += 1 services = services.rstrip(",") print(f"UPDATE [dbo].[NameServiceMapping] SET Services='{services}' WHERE NAME ='{column}'")
print("\n")
3:第二种情况:使用一个 For 加 字典数据结构 {}
- 读取第二列 Name, 作为字典 d 的Key
- 判断字典 d 中是否已经存在这个Name的Key, 使用 __contains__ 进行判断
- 如存在,则追加第一列中的Service。
- 反之,则为字典新加一个Key。
- 最后循环字典 d, 并生成 UPDATE SQL语句
d = {}
rowindex =0
for name in df['Name']:
if(d.__contains__(name)):
d[name] = d[name] + ","+df['Services'][rowindex]
else:
d[name] = df['Services'][rowindex]
rowindex +=1
for key in d:
print(f"UPDATE [dbo].[NameServiceMapping] SET Services='{d[key]}' WHERE NAME ='{key}'")
print("\n")
3:执行结果
第一种结果:

第二种结果:

参考资料
Python 字典(Dictionary):https://www.runoob.com/python/python-dictionary.html
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句的更多相关文章
- 老李分享:pep8 python代码规范
老李分享:pep8 python代码规范 什么是PEPPEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书 . PEP8 译者:本文基于 20 ...
- [javascript]两段 javaScript 代码的逻辑比较
两段 javaScript 代码的逻辑比较: #1 if(tagName.length < 3){ $(this).parent().addClass('active'); tagN ...
- 【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
问题描述 通过Metrics监控页面,我们能得知当前资源(如Redis)的运行情况与各种指标.如果我们需要把指标下载到本地或者生成JSON数据导入到第三方的监控平台呢?Azure是否可以通过Pytho ...
- Python代码块缓存、小数据池
引子 前几天遇到了这样一道Python题目:a='123',b='123',下列哪个是正确的? A. a != b B. a is b C. a==123 D. a + b =246 正确答案是B 是 ...
- Java代码实体类生成SQL语句(Java实体类转数据库)
有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...
- 使用Python解析豆瓣上Json格式数据
现在的API接口多为xml或json,json解析更简洁相对xml来说 以豆瓣的API接口为例,解析返回的json数据: https://api.douban.com/v2/book/1220562 ...
- python读取excel表格中的数据
使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...
- python读取excel表格生成sql语句 第一版
由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦 作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...
- python批量生成SQL语句
1,首先写一条能运行成功插入SQL的语句 INSERT INTO sign_guest(realname,phone,email,sign,event_id)VALUES("jack&quo ...
- 【Azure Developer】使用Java SDK代码创建Azure VM (包含设置NSG,及添加数据磁盘SSD)
在参考Azure官方文档进行VM创建时,发现其中没有包含如何设置NSG的内容,以及如何在创建时就添加数据磁盘的代码(设置磁盘为SSD类型).本文的内容以"使用 Java 创建和管理 Azur ...
随机推荐
- IIS上开启反向代理实现Vue项目接口跨域处理
通常情况下的Vue应用都使用Nginx部署,Nginx有专门的反向代理设置,但若将Vue应用部署在IIS中,针对Vue应用中设置的接口跨域,IIS需要进行反向代理设置. 跨域的设置分为开发环境和生产环 ...
- Solution Set - “卷起击碎定论的漩涡”
目录 0.「CF 1788F」XOR, Tree, and Queries 1.「CF 1815F」OH NO1 (-2-3-4) 2.「CF 1787F」Inverse Transformation ...
- C# 获取系统声卡音频数据,并绘制波形
//by wgscd //date:2022/11/7 UI: <Path Stroke="Red" Data="{Binding path}" Rend ...
- UWP Shadow 阴影
参考文字: https://mtaulty.com/2016/08/10/windows-10-uwp-and-composition-light-and-shade/ <Grid Backgr ...
- 【Docker】---部署集群(2)
RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...
- DICOM-SCP,可以直接使用的SCP(.net framework 4.5)控制台接收端
此程序引用的是Dicom.Core 4.0.8.0,也是最后一版支持部署在.net framework 4.5 或以下环境的.如需要部署在.net4.6.1以上的需要查看另一个文档. 1 using ...
- Python生成成绩报告单:从理论到实践
在教育信息化日益普及的今天,自动化生成和处理学生成绩报告单已成为学校和教育机构的一项重要任务.Python作为一种功能强大且易于学习的编程语言,非常适合用于这种数据处理和报告生成任务.本文将详细介绍如 ...
- 《SpringBoot》自动装配原理(简单易懂)
引入 先看SpringBoot的主配置类 @SpringBootApplication public class DemoApplication{ public static void main(St ...
- IO流:File类的使用
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入/ ...
- Nickel pg walkthrough Intermediate window
nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A -sS 192.168.196.99 Starting Nmap 7.94SVN ( https://nmap.org ...