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

问题描述

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

 

比如:

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

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

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

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

** 以上两种情况,都需要转换为 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:执行结果

第一种结果:

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

 

第二种结果:

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

 

 

参考资料

Python 字典(Dictionary):https://www.runoob.com/python/python-dictionary.html

 

发表评论

您必须 [ 登录 ] 才能发表留言!

相关文章