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

如何用Python的for循环读取Excel工作表并生成指定DataFrame?

批量读取Excel工作表生成DataFrame的正确For循环实现

你之前的代码运行失败,核心问题有两个:一是CTD4_asvlist变量未初始化就直接赋值,二是这种索引赋值的方式并不适配你想要生成对应命名DataFrame的需求。下面给你两种可行的实现方案,其中第一种是更推荐的最佳实践。

推荐方案:用字典存储所有DataFrame

用字典管理批量生成的DataFrame是最清晰、易维护的方式,尤其是处理大量工作表时,不会让全局空间充斥零散变量。

import pandas as pd

# 定义需要读取的工作表名称列表
asv_sheets = ["100m-asv", "800m-asv", "1800m-asv", "2800m-asv", "3800m-asv"]

# 创建空字典,用于存储所有生成的DataFrame
ctd4_asv_collection = {}

for sheet in asv_sheets:
    # 从工作表名中提取深度数字,生成对应键名
    depth_num = sheet.split('m')[0]
    df_key = f"CTD4_{depth_num}_ASV"
    # 读取工作表并设置索引,存入字典
    ctd4_asv_collection[df_key] = pd.read_excel("verconnec.xlsx", sheet_name=sheet).set_index('sign')

调用方式

之后需要使用某个特定DataFrame时,直接通过字典的键访问即可:

# 调用100m深度的ASV数据
ctd4_asv_collection["CTD4_100_ASV"]

可选方案:生成独立的全局变量(不推荐)

如果你确实需要生成CTD4_100_ASV这类独立全局变量,可以用Python的globals()函数,但这种方式可能引发变量名冲突,不利于后续维护,仅作为备选:

import pandas as pd

asv_sheets = ["100m-asv", "800m-asv", "1800m-asv", "2800m-asv", "3800m-asv"]

for sheet in asv_sheets:
    depth_num = sheet.split('m')[0]
    var_name = f"CTD4_{depth_num}_ASV"
    # 直接在全局命名空间创建变量
    globals()[var_name] = pd.read_excel("verconnec.xlsx", sheet_name=sheet).set_index('sign')

运行后你就能直接使用CTD4_100_ASV、CTD4_800_ASV这些变量了。

通用For循环读取Excel工作表的要点

  1. 自动获取工作表列表:如果不想手动写工作表名,可通过pd.ExcelFile自动获取所有工作表名:
    excel_file = pd.ExcelFile("verconnec.xlsx")
    all_sheets = excel_file.sheet_names
    
  2. 统一处理逻辑:循环中可加入通用数据处理步骤(如设置索引、缺失值处理等),确保所有DataFrame格式一致。
  3. 选择合适存储结构:除字典外也可用列表存储,但字典的键值对应关系更直观,方便后续按名称调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:03:13