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

Python代码生成表格未读取CSV数据,大学作业调试求助

问题排查与代码修复:区域住宅用电分析表格无数据显示

核心问题分析

原代码的主要问题在于数据存储字典的结构完全颠倒,导致后续无法正确读取匹配的数据:

  • 初始化时min_consumption采用{区域: {住宅类型: 初始值}}的结构,但后续处理逻辑却试图用min_consumption[住宅类型][区域]存储数据,两者结构不匹配
  • 初始化默认值错误使用str('in f'),应改为float('inf')作为最小值比较的初始基准
  • 多余的嵌套字典初始化逻辑进一步打乱了数据存储结构

修复后的完整代码

import csv

# 数据集路径
file_path = '/Users/brosis/Downloads/AvgHouseholdElectricity.csv'

# 获取用户输入的年份
year_input = input("Enter the year (between 2010 and 2023): ")

# 定义需要分析的区域和住宅类型
regions = ["Central", "North", "West", "North East", "East"]
dwelling_types = ["Private Apartments and Condominiums","1-room / 2-room","3-room","4-room","5-room and Executive","Landed Properties"]

# 初始化存储最小用电量的字典:{住宅类型: {区域: 无穷大初始值}}
min_consumption = {dwelling: {region: float('inf') for region in regions} for dwelling in dwelling_types}

# 读取并处理CSV数据
with open(file_path, mode='r') as file:
    csv_reader = csv.reader(file)
    next(csv_reader)  # 跳过表头

    for row in csv_reader:
        # 提取行数据(确保列索引与CSV结构匹配)
        year, region, dwelling_type, consumption = row[0], row[1], row[2], row[3]

        # 筛选指定年份的数据,去除首尾空格避免格式不匹配
        if year.strip() == year_input.strip():
            try:
                consumption_value = float(consumption)
            except ValueError:
                print(f"Skipping invalid consumption value: {consumption} for row: {row}")
                continue
            
            # 仅处理预定义的区域和住宅类型,避免无关数据干扰
            if dwelling_type in min_consumption and region in min_consumption[dwelling_type]:
                # 更新最小用电量
                min_consumption[dwelling_type][region] = min(min_consumption[dwelling_type][region], consumption_value)

# 生成分析表格
print(f"\nRegional Dwelling Type Analysis for year {year_input}")
print("____________________________________________________________________________________________")
print(f"|{'':<35}| {'|'.join([region.center(10) for region in regions])}|")
print("____________________________________________________________________________________________")

for dwelling_type in dwelling_types:
    # 格式化每行数据,无数据时显示'No Data'
    row_values = []
    for region in regions:
        val = min_consumption[dwelling_type][region]
        if val == float('inf'):
            row_values.append(f"{'No Data':>10}")
        else:
            row_values.append(f"{val:>10.2f}")  # 保留两位小数提升美观度
    
    print(f"|{dwelling_type:<35}| {'|'.join(row_values)}|")
    print("____________________________________________________________________________________________")

关键修改说明

  1. 修正字典结构:将min_consumption调整为{住宅类型: {区域: 初始值}},与后续数据存储逻辑完全匹配
  2. 修复初始值:用float('inf')作为最小值比较的初始基准,确保有效数据能正常替换初始值
  3. 增加数据校验:仅处理预定义的区域和住宅类型,避免无关数据干扰存储结构
  4. 优化表格输出:明确判断无数据的情况,同时格式化数值为两位小数提升可读性
  5. 年份匹配优化:使用strip()去除首尾空格,避免因格式不一致导致匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:45:55