当前位置: 首页 > news >正文

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改

需求:在数据库中提取需要的字段内容;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件

# -*- coding: utf-8 -*-
import pandas as pd
import re
import pymssql
import timestart_time = time.time()
print("程序开始时间:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time)))
# 建立数据库连接
conn = pymssql.connect(server='192.168.2.1', user='sa', password='123', database='YD')# 执行 SQL 查询
query = f'''
SELECT 类型,流水号,账号,时间,通过时间,客服号,地市,区县,grid,测试结果
FROM TS_DATA WHERE CAST(最后质检通过时间 AS date) = '2024-09-01';
'''  # 修改为你的实际表名
df = pd.read_sql(query, conn)# 确保 '测试结果' 列中是字符串
df['测试结果'] = df['测试结果'].astype(str)# 定义提取信息的函数
def extract_info(text):# 提取光功率,包括可能的中文错误信息light_power = re.search(r'【功率】:([^【\n]*)', text)light_power = light_power.group(1).strip() if light_power else None# 提取速率,包括 'M' 字符rate = re.search(r'【速率】:([\d.]+M)', text)rate = rate.group(1) if rate else None# 提取 radiusradius = re.search(r'【ra】:([^,\s【]+)', text)radius = radius.group(1).strip() if radius else None# 提取上线时间online_time = re.search(r'上线:([\d/:\s]+)', text)online_time = online_time.group(1) if online_time else Nonereturn pd.Series([light_power, rate, radius, online_time],index=['功率', '速率', 'ra', '上线'])# 提取数据并添加到新的列中
df[['功率', '速率', 'ra', '上线']] = df['测试结果'].apply(extract_info)df.fillna('空白', inplace=True)
df['测试结果'] = df['测试结果'].replace('None', '', regex=False)
# 添加一个新列来标记是否有任何字段为"空白"
df['是否包含空白'] = (df['功率'] == "空白") | (df['速率'] == "空白") | (df['ra'] == "空白")
df['是否包含空白'] = df['是否包含空白'].map({True: '是', False: '否'})
# 保存到新的 Excel 文件
output_file = '投诉9月份数据-0901.xlsx'
df.to_excel(output_file, index=False, engine='openpyxl')print(f"数据已处理并保存到 {output_file}")# 关闭数据库连接
conn.close()
end_time = time.time()
print("程序结束时间:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time)))
run_time = end_time - start_time
print("程序运行耗时:%0.2f" % run_time, "s")

最终效果图

在这里插入图片描述

http://www.lryc.cn/news/446982.html

相关文章:

  • 常见的TTL,RS232,RS485,IIC,SPI,UART之间的联系和区别
  • 【数据结构】栈和队列(Stack Queue)
  • Vue.js基础
  • 罐区紧急切断阀安装位置规范
  • JavaScript 中的事件模型
  • 理解Java引用数据类型(数组、String)传参机制的一个例子
  • 【计算机组成原理】实验一:运算器输入锁存器数据写实验
  • LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置
  • node js版本低导致冲突WARN EBADENGINE package: required: { node: ‘>=18‘ }
  • 828华为云征文|使用Flexus X实例安装宝塔面板教学
  • 1.量化第一步,搭建属于自己的金融数据库!
  • git-repo系列教程(6) 在自己服务器上搭建git-repo仓库
  • 微服务——服务保护(Sentinel)(一)
  • jenkins声明式流水线语法详解
  • mini-lsm通关笔记Week2Overview
  • 基于SpringBoot的在线点餐系统【附源码】
  • 生成式语言模型底层技术面试
  • HTML开发指南
  • 共筑数据安全防线!YashanDB与SPU完成兼容性互认证
  • 【FastAPI】使用FastAPI和Redis实现实时通知(SSE)
  • Keyence_PL_MC_HslCommunication import MelsecMcNet
  • 软件架构的演变与趋势(软件架构演变的阶段、综合案例分析:在线电商平台架构演变、开发补充)
  • Shopify独立站运营必知必会:选品与防封技巧
  • Unity开发绘画板——03.简单的实现绘制功能
  • R语言的基础知识R语言函数总结
  • 龙年国庆专属姓氏头像
  • 基于Es和智普AI实现的语义检索
  • URI和URL的区别
  • Java 入门指南:获取对象的内存地址
  • 【Linux】项目自动化构建工具-make/Makefile 详解