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

ops/2024/10/22 14:05:16/

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

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

python"># -*- 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.ppmy.cn/ops/118958.html

相关文章

GAMES101(作业8)

作业8 题目: 模拟绳子动画,包括基于物理的,和非物理的,应该修改的函数是:rope.cpp 中的void Rope::simulateEuler(... Rope::rope(...),,void Rope::simulateVerlet(...) 代码框架: main:负…

UnityHub下载任意版本的Unity包

1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可

雷池 WAF 如何配置才能正确获取到源 IP

经常有大哥反馈说雷池攻击日志里显示的 IP 有问题。 这里我来讲一下为什么一些情况下雷池显示的攻击 IP 会有问题。 问题说明 默认情况下,雷池会通过 HTTP 连接的 Socket 套接字读取客户端 IP。在雷池作为最外层网管设备的时候这没有问题,雷池获取到的…

Android常用C++特性之std::make_unique

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::make_unique 是 C14 引入的一个函数模板,用于创建类型为 std::unique_ptr 的智能指针。智能指针用于管理动态分配的对象,在其生命周期结束…

PHP程序如何实现限制一台电脑登录?

PHP程序如何实现限制一台电脑登录? 可以使用以下几种方法: 1. IP地址限制:在PHP中,可以通过获取客户端的IP地址,然后与允许登录的IP地址列表进行比对。如果客户端的IP地址不在列表中,就禁止登录。 “php $…

Qt 文件操作

目录 Qt 文件操作1. I/O设备1.1 I/O设备的类型1.2 打开模式 2. 文件读写2.1 QFile打开文件写文件读文件静态函数 2.2 StreamQTextStreamQDataStream 2.3 QFileInfo 3. 配置文件3.1 QSettings基本用法设置和获取值配置文件格式常用函数分组操作 3.2 QJsonDocument主要功能解析 J…

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN

51单片机的光照强度检测【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块光照传感器按键蜂鸣器LED等模块构成。适用于光照强度检测、光照强度测量报警等相似项目。 可实现功能: 1、LCD1602实时显示光照强度信息 2、光照强度传感器(电位器模拟)采集光照信息 3、可…