首页 > 编程语言 >python处理数据的导出到Excel

python处理数据的导出到Excel

时间:2023-11-20 14:44:20浏览次数:35  
标签:python Excel 导出 id df result label type options

import datetime
import json
import os
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.sql import text

# 数据库连接配置,请根据你的实际情况修改
db_config = {
    'host': 'your_database_host',
    'user': 'your_database_user',
    'password': 'your_database_password',
    'database': 'your_database_name'
}

# 使用 SQLAlchemy 创建数据库连接,并获取 Connection 对象
engine = create_engine (
    f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}/{db_config['database']}")
connection = engine.connect ()

# 查询onboard_companies表中status等于1的数据
companies_query = text ("SELECT id,ap_cid,company_name FROM onboard_companies WHERE status = 1")
# 尝试读取数据到DataFrame
companies_df = pd.read_sql (companies_query, connection)
# print(companies_df)

# 查询labels表中status等于2的数据
labels_query = text ("SELECT id,name FROM labels WHERE status = 2 AND id IN (4,9)")
# 尝试读取数据到DataFrame
labels_df = pd.read_sql (labels_query, connection)

# 查询label_fields表中与labels表关联的数据
label_fields_query = text ("""
    SELECT lf.id, lf.label_id, lf.name, lf.type, lf.field_type,lf.is_required, lf.options
    FROM label_fields lf
    INNER JOIN labels l ON lf.label_id = l.id
    WHERE l.status = 2 AND l.id IN (4,9) AND lf.status = 1 AND lf.type != 7
""")
# 尝试读取数据到DataFrame
label_fields_df = pd.read_sql (label_fields_query, connection)

# 关闭数据库连接
connection.close ()

# 转换type和is_required的值
type_mapping = {
    1: "Single-select dropdown list (Self-defined)",
    2: "Single-select dropdown list (Company ID)",
    3: "Multi-select dropdown list (Self-defined)",
    4: "Multi-select dropdown list (Company ID)",
    5: "Multi-select dropdown list (Trade Code)",
    6: "Calendar",
    8: "Free text",
}

field_type_mapping = {
    1: "dropdown",
    2: "checkbox",
    3: "textarea",
    4: "date",
    5: "file",
    6: "multidropdow",
}

is_required_mapping = {
    0: "可选",
    1: "必填",
}


# 处理options列
def process_options(options):
    if pd.notna (options):
        options_list = json.loads (options)
        options_str = ",".join (options_list)
        return options_str
    return None


label_fields_df['type'] = label_fields_df['type'].map (type_mapping)
label_fields_df['field_type'] = label_fields_df['field_type'].map (field_type_mapping)
label_fields_df['is_required'] = label_fields_df['is_required'].map (is_required_mapping)
label_fields_df['options'] = label_fields_df['options'].apply (process_options)

# 合并数据
merged_df = pd.merge (labels_df, label_fields_df, left_on='id', right_on='label_id')

# 选择需要的列
result_df = merged_df[['id_x', 'name_x', 'id_y', 'name_y', 'type', 'field_type', 'is_required', 'options']]
# print(result_df)

# 创建一个新的DataFrame来存储组合后的结果
combined_data = pd.DataFrame ()
# 使用嵌套的for循环组合数据
for _, company_row in companies_df.iterrows ():
    for _, result_row in result_df.iterrows ():
        # 创建一个新的行,包含公司数据和结果数据
        new_row = {
            'company_id': company_row['id'],
            'company_ap_cid': company_row['ap_cid'],
            'company_name': company_row['company_name'],
            'result_id_x': result_row['id_x'],
            'result_name_x': result_row['name_x'],
            'result_id_y': result_row['id_y'],
            'result_name_y': result_row['name_y'],
            'result_type': result_row['type'],
            'result_field_type': result_row['field_type'],
            'result_is_required': result_row['is_required'],
            'result_options': result_row['options'],
            'input_options': ''
        }
        # 将新行添加到组合后的数据框中
        combined_data = pd.concat ([combined_data, pd.DataFrame ([new_row])], ignore_index=True)

# 打印结果
# print(combined_data)

combined_data.columns = ['Company Id', 'Company AP ID', 'Company Name', 'Label Id', 'Label Name', 'Label Field Id',
                         'Label Field Name', 'Label Field Type', 'Label Field Val Type', 'is Required', 'Optional options', 'Input options']
# print(combined_data)

# 获取当前日期和时间
current_datetime = datetime.datetime.now ()

# 把日期和事件格式化为字符串
formatted_datetime = current_datetime.strftime ("%Y%m%d_%H%M%S")

# 在当前文件夹下的 "outFiles" 文件夹中保存 Excel 文件
output_folder = "outFiles"

# 将格式化的日期时间与所需的文件名连接起来
output_file_name = f"outPutLabel_{formatted_datetime}.xlsx"

# 如果 "outFiles" 文件夹不存在,则创建它
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 拼接输出文件的完整路径
output_file_path = os.path.join(output_folder, output_file_name)

# 将数据框架写入 Excel 文件
combined_data.to_excel (output_file_path, index=False)

print(f"Excel 文件已保存到 {output_file_path}")

  

标签:python,Excel,导出,id,df,result,label,type,options
From: https://www.cnblogs.com/kaka0318/p/17843912.html

相关文章

  • python2和3的语法区别
    `` - python2相当于repr  python3不能使用Input-python2如果输入字符需要加双引号,数字不需要加 python3数字字符都可以Raw_input-python2输入数字字符都可以    python3丢弃exceptException,e:- python2可以用  python3语法报错,推荐使用exceptE......
  • Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?
    今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录问题一:有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性.我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发. 解......
  • 加密锁(加密狗)保护Python应用程序防止被反编译
    开发套件使用的是原HASP/SafeNet/金雅拓/泰雷兹加密狗最新开发工具加密锁(加密狗)对python程序代码加密保护,保护自己软件版权被F法使用。(注:本文为Python程序保护的纯技术贴,欢迎留言探讨)开发工具下载:​​http://www.chinadlp.com/?list-DriveDownload.html​​概述使用圣天诺加密......
  • [944] Extracting tables from a PDF in Python
    ToextracttablesfromaPDFinPython,wecanuseseverallibraries.Onepopularchoiceisthe tabula-pylibrary,whichisaPythonwrapperforApachePDFBox.Hereisastep-by-stepguidetogetstarted:1.Installtherequiredlibraries:pipinstalltab......
  • 【4.0】Python高级之匿名函数
    【一】匿名函数的定义在Python里有两类函数:第一类:用def关键词定义的正规函数第二类:用lambda关键词定义的匿名函数Python使用lambda关键词来创建匿名函数,而非def关键词lambdaargument_list:expressionlambda:定义匿名函数的关键词。argument_list:函......
  • 【7.0】Python高级之生成器
    【一】什么是生成器?Python中的生成器是一种特殊的迭代器,可以在需要时生成数据,而不必提前从内存中生成并存储整个数据集。通过生成器,可以逐个生成序列中的元素,而无需一次性生成整个序列。生成器在处理大数据集时,具有节省内存、提高效率的特点。【二】生成器有两种创建方式【......
  • 【6.0】Python高级之迭代器
    【一】迭代器介绍迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代whileTrue:msg=input('>>:').strip()......
  • EXCEL中逆向查找的十种方法
    逆向查找在Excel中指的是根据某个数值或条件,查找该数值或条件所在的单元格位置。逆向查找可以帮助用户快速定位数据,对于数据分析和处理非常有用。下面将详细介绍在Excel中进行逆向查找的十种方法。一、使用MATCH函数MATCH函数可以在指定范围内查找具体数值或条件,并返回该数值或......
  • 【Python入门教程】Python中函数的用法和意义
    ​        在Python中,函数是一种可重用的代码块,它可以被多次调用以执行特定的任务。函数可以帮助我们组织代码,使其更易于阅读和调试,同时还可以提高代码的可重用性和可维护性。一、函数的定义        在Python中,函数使用def关键字进行定义,语法如下:deffunctio......
  • Python中用requests时遇到的错误警告解决方案
    最近,我在Python2.7.6(Ubuntu14.04.2LTS)环境中将requests库的版本从2.5.3升级到2.6.0,却遇到了’AtrueSSLContextobjectisnotavailable’警告。每当我在Python2.7.6环境中尝试使用requests库访问’github’时,都会看到这个警告。mkvirtualenvrequests260-irequests==2.6.0......