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

如何基于字符串值遍历DataFrames字典,批量填充Excel工作表Dummy列

问题分析

你的代码存在两个核心问题:

  1. 判断逻辑错误:循环处理DataFrame时,你使用的student_name是最后一次遍历openpyxl工作表时获取的B2单元格值,导致所有工作表都用同一个值做判断,而非针对每行的Name列值进行判断,完全不符合“根据每行学生名填充”的需求。
  2. 未保存修改:你修改了DataFrame中的Dummy列,但没有将修改后的数据写回原Excel文件,所有修改都不会实际生效。
修正后的代码

根据你的需求,提供两种针对性方案:

方案1:全量填充(覆盖原有值)

对每行数据,根据Name列是否为Roberto/Leonardo直接填充Dummy列:

import pandas as pd

# 文件路径
file_path = r'C:/Users/machukovich/Desktop/stack_2.xlsx'

# 读取所有工作表为DataFrame字典
dict_of_df = pd.read_excel(file_path, sheet_name=None)

# 遍历处理每个工作表
for sheet_name, df in dict_of_df.items():
    # 针对每行Name列值判断,填充Dummy
    df['Dummy'] = df['Name'].apply(lambda x: 'success' if x in ['Roberto', 'Leonardo'] else 'failure')

# 将修改后的数据写回Excel
with pd.ExcelWriter(file_path) as writer:
    for sheet_name, df in dict_of_df.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

方案2:仅填充未处理的NaN值

保留已填充的success,仅将剩余NaN值按非目标学生名填充为failure:

import pandas as pd
import numpy as np

file_path = r'C:/Users/machukovich/Desktop/stack_2.xlsx'
dict_of_df = pd.read_excel(file_path, sheet_name=None)

for sheet_name, df in dict_of_df.items():
    # 仅对Dummy列的NaN值,根据Name列判断填充
    df['Dummy'] = np.where(
        df['Dummy'].isna(),
        df['Name'].apply(lambda x: 'failure' if x not in ['Roberto', 'Leonardo'] else 'success'),
        df['Dummy']
    )

# 保存结果
with pd.ExcelWriter(file_path) as writer:
    for sheet_name, df in dict_of_df.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

特殊场景方案:按工作表B2单元格判断

如果你确实需要根据每个工作表B2单元格的值,统一填充整个表的Dummy列,可使用以下代码:

import pandas as pd
from openpyxl import load_workbook

file_path = r'C:/Users/machukovich/Desktop/stack_2.xlsx'

# 建立工作表名与B2单元格值的映射
wb = load_workbook(file_path)
sheet_student_map = {sheet.title: sheet['B2'].value for sheet in wb.worksheets}

# 读取所有工作表
dict_of_df = pd.read_excel(file_path, sheet_name=None)

# 遍历处理
for sheet_name, df in dict_of_df.items():
    student_name = sheet_student_map[sheet_name]
    if student_name in ['Roberto', 'Leonardo']:
        df['Dummy'] = df['Dummy'].fillna('success')
    else:
        df['Dummy'] = df['Dummy'].fillna('failure')

# 保存修改
with pd.ExcelWriter(file_path) as writer:
    for sheet_name, df in dict_of_df.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:44:50