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

如何用for循环为DataFrame字典中每个DataFrame添加唯一列?

问题分析与解决方案

咱们先拆解下你代码里的问题:

  • 你的codes是个二维嵌套列表(外层多套了一层方括号),所以for i in codes循环时,i拿到的是整个代码列表,而非单个代码值。
  • 循环里你一直给df['Sheet1']赋值,相当于所有操作都只作用在名为Sheet1的DataFrame上,其他工作表完全没被处理,最后自然所有(实际是这个Sheet1)的Code列都被设成同一个值了。

要实现每个DataFrame对应唯一的Code列,咱们可以这么调整:

步骤1:修正codes的结构

先把嵌套的codes转成一维列表,让每个元素都是独立的代码:

# 直接改成一维列表
codes = ['01', '02', '03', '05', '06', '08', '10', '11', '13', '15', '17', '19', '21', '23', '25', '27', '29', '31', '33', '35', '37', '39', '43', '45', '4.55', '48', '52']

# 或者如果保留原嵌套结构,用这行提取内层列表
# codes = codes[0]

步骤2:将工作表与代码一一配对赋值

因为你读取的工作表数量(27个)和代码数量(27个)完全匹配,咱们可以用zip()函数把工作表名称和对应代码绑定,循环给每个DataFrame添加唯一的Code列:

import pandas as pd

# 读取Excel文件,sheet_name=None返回字典,键为工作表名,值为对应DataFrame
df = pd.read_excel(sales, sheet_name=None, ignore_index=True, skiprows=7)

# 遍历配对后的工作表名和代码
for sheet_name, code in zip(df.keys(), codes):
    df[sheet_name]['Code'] = code

关键说明:

  • zip(df.keys(), codes)会把字典里的每个工作表名称,和codes列表中对应位置的代码一一绑定,保证每个工作表对应唯一的代码。
  • 循环中直接操作df[sheet_name](即每个工作表对应的DataFrame),给它添加Code列并赋值对应的代码,这样每个DataFrame的Code列就都是唯一的了。

另外要注意:确保Excel里的工作表顺序和codes列表的顺序完全对应,因为sheet_name=None读取工作表的顺序是Excel文件里工作表的排列顺序,如果顺序不对,代码和工作表就会匹配错误哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:58