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

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

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

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

# -*- coding: utf-8 -*-
import pandas as pd
import re
import pymssql
import time

start_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

    # 提取 radius
    radius = 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 None

    return 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.kler.cn/a/326162.html

相关文章:

  • Springboot 整合 Java DL4J 打造金融风险评估系统
  • jmeter常用配置元件介绍总结之配置元件
  • MySQL 怎么不丢数据(关于开启双1配置)
  • stm32下的ADC转换(江科协 HAL版)
  • Minikube 上安装 Argo Workflow
  • vue3 如何调用第三方npm包内部的 pinia 状态管理库方法
  • ElasticSearch安装分词器与整合SpringBoot
  • 【制作自解压程序】使用7Z制作自解压程序
  • OceanBase技术解析:自适应分布式下压技术
  • 【软件整理资料】软件项目配套资料,项目计划书(word)
  • IDEA使用技巧和插件推荐
  • 爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析
  • js中的深拷贝与浅拷贝 手写深拷贝代码
  • 深入剖析 Android Lifecycle:构建高效稳定的应用
  • 如何设计能吸引下载的截图以及注意事项
  • SpringBoot助力墙绘艺术市场创新
  • golang学习笔记16-数组
  • java 解析excel (本地资源)
  • Android常用C++特性之std::find_if
  • CF1619D.New Year‘s Problem
  • 解决 TypeError: Expected state_dict to be dict-like, , got <class ‘*‘>.
  • Acwing 最小生成树
  • 每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java
  • 《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测
  • linux打开桌面软件(wps)、获取已打开的文件名(wps)
  • Ini文件读写配置工具类 - C#小函数类推荐