You need to enable JavaScript to run this app. 使用openpyxl匹配Excel行列头取值并计算指定普查区域属性总和
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl匹配Excel行列头取值并计算指定普查区域属性总和

普查区域Excel数据提取与求和实现

核心思路

  • 提前定位所有目标表头的列位置,减少重复遍历开销
  • 逐行匹配普查区域标识码,匹配成功后直接读取对应列的数值累加
  • 最终返回每个搜索字段的求和结果,也可扩展输出单个区域的对应属性值

完整可运行代码

from openpyxl import load_workbook

# 加载Excel文件,请替换为你的实际文件路径
wb = load_workbook("你的普查数据文件路径.xlsx")
# 取第一个工作表,你也可以指定工作表名如wb["Sheet1"]
ws = wb.active

# 获取用户输入的普查区域
inputTracts = input("Enter tract number(s): ")
inputTracts = inputTracts.split(', ')
# 如果Excel里普查标识码是数字类型,打开下面的注释把输入转成int,避免类型不匹配导致匹配失败
# inputTracts = [int(t) for t in inputTracts]

# 指定要查询的表头
searchTerms = ['pop', 'pop60', 'unempl', 'lbrforce', 'hs', 'col', 'pov']

def calc_tract_sum(worksheet):
    # 第一步:先找每个搜索字段对应的列索引,key是字段名,value是列号(openpyxl行列从1开始计数)
    header_col = {}
    # 遍历第一行表头
    for col in range(1, worksheet.max_column + 1):
        cell_val = worksheet.cell(row=1, column=col).value
        if cell_val in searchTerms:
            header_col[cell_val] = col
    # 校验缺失的表头
    missing_terms = [t for t in searchTerms if t not in header_col]
    if missing_terms:
        raise ValueError(f"找不到以下表头:{missing_terms}")
    
    # 初始化结果字典,每个字段初始总和为0
    sum_result = {term:0 for term in searchTerms}
    # 如果需要存储单个区域的属性值,打开下面的注释即可
    # single_result = {tract:{term:None for term in searchTerms} for tract in inputTracts}

    # 第二步:遍历所有数据行(从第二行开始,第一行是表头)
    for row in range(2, worksheet.max_row + 1):
        # 第一列是普查区域标识码
        tract_id = worksheet.cell(row=row, column=1).value
        if tract_id in inputTracts:
            # 遍历所有要搜索的字段,累加数值
            for term in searchTerms:
                col = header_col[term]
                val = worksheet.cell(row=row, column=col).value
                # 处理空值,避免加None报错
                val = val if val is not None else 0
                sum_result[term] += val
                # 存储单个区域值的逻辑,需要的话打开注释
                # single_result[tract_id][term] = val
    
    # 如果需要按searchTerms的固定顺序返回列表,可使用下面的代码
    # sum_list = [sum_result[term] for term in searchTerms]
    # return sum_list, single_result
    return sum_result

# 调用函数获取结果
result = calc_tract_sum(ws)
# 打印结果
for term, total in result.items():
    print(f"{term} 总和:{total}")

注意事项

  • 可根据实际需求调整空值的处理逻辑,当前默认空单元格按0计算
  • 如果需要导出单个区域的属性值,打开代码中对应注释的部分即可获取对应数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:12:02