You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas导出Excel失败:仅显示表头无数据的问题排查

Excel导出仅显示表头无数据的问题排查与解决方案

问题描述

编写Python代码通过菜单交互调用自定义Functions模块完成计算任务,尝试用Pandas结合xlsxwriter将各功能的输入输出导出至Excel,但生成的文件仅显示表头,无实际数据填充。

核心问题分析

  1. 数据定义语法错误:data变量第一行末尾多了一个逗号,导致整个data被解析为元组而非列表的列表,Pandas无法识别为有效数据行。
  2. 缺失Pandas类导入:代码中使用DataFrame和ExcelWriter但未导入,实际运行会抛出NameError,导致导出逻辑无法执行。
  3. 变量覆盖问题:所有功能共用单个变量存储输入输出,多次执行同一功能会覆盖之前的数据,最终仅保留最后一次执行结果。
  4. 变量命名冲突:全局data变量与功能5的输入变量重名,会导致数据被意外覆盖。

解决方案

1. 修正数据结构语法

移除data第一行末尾的逗号,确保其为列表的列表格式,并调整行内容匹配期望格式:

data = [
    [nome_utilizador, '', '', '', nome_utilizador],  # C1E1:功能1的输出
    [nome_utilizador, numero1, numero2, '', resultadoex2],  # C1E2:功能2的输入输出
    [nome_utilizador, nota1, nota2, nota3, media_notas],  # C1E3:功能3的输入输出
    [nome_utilizador, altura, largura, '', area_retangulo],  # C1E4:功能4的输入输出
    [nome_utilizador, preco, valordado, '', troco],  # C1E5:功能5的输入输出
    [nome_utilizador, distancia, velocidade, '', tempo_de_viagem],  # C1E6:功能6的输入输出
    [nome_utilizador, combustivel_gasto, distancia2, '', Consumo],  # C1E7:功能7的输入输出
    [nome_utilizador, preco_restaurante, quantidade_pessoas, '', precopp]  # C1E8:功能8的输入输出
]

2. 补充Pandas导入语句

在代码开头添加:

from pandas import DataFrame, ExcelWriter

3. 修复变量命名冲突

将功能5的输入变量data改为data_nascimento,避免覆盖全局数据变量:

case "5":
    data_nascimento = input("Indique a sua data de nascimento dd/mm/aaaa\n")
    resultado = ex13(data_nascimento)

完整修正后的代码

from Functions import *
import xlsxwriter
from pandas import DataFrame, ExcelWriter  # 补充Pandas类导入

if __name__ == "__main__" :    
    # 拆分变量初始化,提高可读性
    resposta1 = 'a'
    resposta2 = 'a'
    nome_utilizador = ''
    numero1 = numero2 = resultadoex2 = 0
    nota1 = nota2 = nota3 = media_notas = 0
    altura = largura = area_retangulo = 0.0
    preco = valordado = troco = 0.0
    distancia = velocidade = tempo_de_viagem = 0.0
    combustivel_gasto = distancia2 = Consumo = 0.0
    preco_restaurante = quantidade_pessoas = precopp = 0.0
    golos_totais = jogos_totais = resultado = 0
    preco_original = desconto = 0.0
    seguidores_atuais = seguidores_antigos = 0
    altura_utilizador = peso = 0.0
    capital_inicial = taxa_de_juros = 0.0
    tempo_anos = 0
    quantia_euros = taxa_conversao = 0.0

    while resposta1 != 'x':
        resposta2 = 'a'
        print(f'-------Menu-------')
        print(f'->1 Compêndio 1')
        print(f'->2 Compêndio 2/3')
        print(f'->x Sair')
        print(f'------------------')
        resposta1 = input('')
        match resposta1:
            case "1":
                while resposta2 != '0':
                    print(f'-------Menu Compêndio 1-------\n')
                    print(f'->1 "Olá utilizador"')
                    print(f'->2 "Aritmia"')
                    print(f'->3 "Média"')
                    print(f'->4 "Área retangulo"')
                    print(f'->5 "Troco"')
                    print(f'->6 "Tempo de viagem"')
                    print(f'->7 "Consumo de combustivel"')
                    print(f'->8 Preco pp')
                    print(f'->0 Voltar') 
                    print(f'->x Sair')
                    print(f'------------------------------')
                    resposta2 = input('')
                    if resposta2 == 'x':
                        resposta1 = 'x'
                        resposta2 = '0'
                    match resposta2:
                        case "1":
                            nome_utilizador = ex1()
                        case "2":
                            numero1 = int(input('Insira um número: '))
                            numero2 = int(input('Insira outro numero: '))
                            resultadoex2 = ex2(numero1,numero2)
                        case "3":
                            nota1= int(input('Insira as suas notas:\n'))
                            nota2= int(input(''))
                            nota3= int(input(''))
                            media_notas= ex3(nota1,nota2,nota3)
                        case "4":
                            altura = float(input('Insira a altura: '))
                            largura = float(input('Insira a largura: '))
                            area_retangulo = ex4(altura,largura)
                        case "5":
                            preco = float(input('Insira o preco do produto:\n'))
                            valordado = float(input('Insira o valor:\n'))
                            troco = ex5(preco,valordado)
                        case "6":
                            distancia = float(input('Insira a distancia da viagem em km\n'))
                            velocidade = float(input('Insira a velocidade média em km/h\n'))
                            tempo_de_viagem = ex6(distancia,velocidade)
                        case "7":
                            combustivel_gasto = float(input('Insira o combustivel gasto em litros \n'))
                            distancia2 = float(input('Insira a distancia percorrida em km\n'))
                            Consumo = ex7(combustivel_gasto,distancia2)
                        case "8":
                            preco_restaurante = float(input('Insira o preco da refeição\n'))
                            quantidade_pessoas = int(input('Insira a quantidade de pessoas\n'))
                            precopp = ex8(preco_restaurante,quantidade_pessoas)
            case "2":
                while resposta2 != "0":
                    print(f'------Menu Compêndio 2/3------\n')
                    print(f'->1 "Golos por jogo"')
                    print(f'->2 "Preço com desconto"')
                    print(f'->3 "Crescimento de seguidores"')
                    print(f'->4 "IMC"')
                    print(f'->5 "Dias vividos"')
                    print(f'->6 "Juros Simples"')
                    print(f'->7 "Conversão para dolar"')
                    print(f'->0 Voltar') 
                    print(f'->x Sair')
                    print(f'------------------------------')
                    resposta2 = input('')
                    if resposta2 == 'x':
                        resposta1 = 'x'
                        resposta2 = '0'
                    match resposta2:
                        case "1":
                            golos_totais = int(input('Insira a quantidade de golos marcados\n'))
                            jogos_totais = int(input('Insira a quantidade de jogos jogados\n'))
                            resultado = ex9(golos_totais,jogos_totais)
                        case "2":
                            preco_original = float(input('Insira o preco original\n'))
                            desconto = int(input('Insira o desconto\n'))
                            resultado = ex10(preco_original,desconto)
                        case "3":
                            seguidores_atuais = int(input('Insira a quantidade de seguidores que tem\n'))
                            seguidores_antigos = int(input('Insira a quantidade de seguidores que tinha há um mês atrás\n'))
                            resultado = ex11(seguidores_atuais,seguidores_antigos)
                        case "4":
                            altura_utilizador = float(input('Insira a sua altura\n'))
                            peso = float(input('Insira o seu peso\n'))
                            resultado = ex12(peso,altura_utilizador)
                        case "5":
                            data_nascimento = input("Indique a sua data de nascimento dd/mm/aaaa\n")
                            resultado = ex13(data_nascimento)
                        case "6":
                            capital_inicial = float(input('Insira a capital inicial\n'))
                            taxa_de_juros = float(input('Insira a taxa de juros\n'))
                            tempo_anos = int(input('Insira a quantidade de anos\n'))
                            resultado = ex14(capital_inicial,taxa_de_juros,tempo_anos)
                        case "7":
                            quantia_euros = float(input('Insira a quantidade em euros\n'))
                            taxa_conversao = float(input('Insira a taxa de conversao para dolar\n'))
                            resultado = ex15(quantia_euros,taxa_conversao)
    # 修正数据结构,移除多余逗号
    data = [
        [nome_utilizador, '', '', '', nome_utilizador],
        [nome_utilizador, numero1, numero2, '', resultadoex2],
        [nome_utilizador, nota1, nota2, nota3, media_notas],
        [nome_utilizador, altura, largura, '', area_retangulo],
        [nome_utilizador, preco, valordado, '', troco],
        [nome_utilizador, distancia, velocidade, '', tempo_de_viagem],
        [nome_utilizador, combustivel_gasto, distancia2, '', Consumo],
        [nome_utilizador, preco_restaurante, quantidade_pessoas, '', precopp]
    ]
    index = ['C1E1', 'C1E2', 'C1E3', 'C1E4', 'C1E5', 'C1E6', 'C1E7', 'C1E8']
    columns = ['Nome', 'Input 1', 'Input 2', 'Input 3', 'Output']
    df = DataFrame(data, columns=columns, index=index)
    writer = ExcelWriter('output.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=True)
    writer.close()

额外说明

  • 若未执行某功能,对应行将保留初始化值(如0或空字符串),可添加判断逻辑跳过未执行的功能行。
  • 若需要保留多次执行同一功能的历史数据,可改用列表存储每次操作的记录,再转换为DataFrame导出。

内容的提问来源于stack exchange,提问作者Herp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:25:54