【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。

问题描述

在处理一个数据收集工作任务上,收集到的数据内容格式都不能直接对应到数据库中的表格内容。

 

比如:

第一种情况:服务名作为第一列内容,然后之后每一列为一个人名,1:代表此人拥有这个服务,0:代表不拥有。

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

** 以上两种情况,都需要转换为 Name所对应的Services数据(多个Services用逗号连接在一起)。

 

由于数据量大,如果人工处理,工作量非常巨大,机械性,重复且易出错。于是,借助Python Pandas,短短几句代码就可以实现!

 

问题解答

1: 通过引入 pandas 组件,读取CSV文件

import pandas as pd

 

df = 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

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

目录
打赏
0
3
4
0
203
分享
相关文章
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
49 9
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
86 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
|
8月前
|
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
337 0
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
5月前
|
SQL
使用SQL进行集合查询和数据维护
使用SQL进行集合查询和数据维护
69 0
Entity Framework Core 与 SQL Server 携手,高级查询技巧大揭秘!让你的数据操作更高效!
【8月更文挑战第31天】Entity Framework Core (EF Core) 是一个强大的对象关系映射(ORM)框架,尤其与 SQL Server 数据库结合使用时,提供了多种高级查询技巧,显著提升数据操作效率。它支持 LINQ 查询,使代码简洁易读;延迟加载与预先加载机制优化了相关实体的加载策略;通过 `FromSqlRaw` 或 `FromSqlInterpolated` 方法支持原始 SQL 查询;可调用存储过程执行复杂任务;利用 `Skip` 和 `Take` 实现分页查询,便于处理大量数据。这些特性共同提升了开发者的生产力和应用程序的性能。
354 0

云原生

+关注