Python Pandas实现Xlookup遇NameError:main_df1未定义求代码修正
修正代码解决NameError及实现Xlookup功能
错误原因
你遇到的NameError: name 'main_df1' is not defined是因为代码中引用了未定义的变量main_df1,实际应该使用之前读取源文件生成的df1变量。
完整修正代码
结合你的需求——从源Excel的Debt、Liquidity列匹配数据,批量填充到多个格式一致的目标文件的C17、C18单元格,以下是修正后的可运行代码:
import pandas as pd from openpyxl import load_workbook # 源文件路径 path_source = r"C:\Test source.xlsx" # 多个目标文件路径列表,按需添加 destination_files = [ r"C:\Stress Test Q4 2022\test.xlsx", r"C:\Stress Test Q4 2022\test2.xlsx" ] # 读取源数据,将Fund name设为索引,提升查找效率 df_source = pd.read_excel(path_source, index_col="Fund name") # 定义Xlookup逻辑函数 def xlookup(lookup_value, lookup_index, return_col, if_not_found: str = ''): try: return return_col.loc[lookup_value] except KeyError: return f'"{lookup_value}" not found!' if if_not_found == '' else if_not_found # 批量处理每个目标文件 for dest_file in destination_files: # 用openpyxl加载目标文件,保留原有格式 wb = load_workbook(dest_file) ws = wb.active # 假设目标文件A1单元格是要匹配的基金名称,按需修改位置 target_fund = ws["A1"].value # 填充C17(Debt值)和C18(Liquidity值) ws["C17"].value = xlookup(target_fund, df_source.index, df_source["Debt"]) ws["C18"].value = xlookup(target_fund, df_source.index, df_source["Liquidity"]) # 保存修改后的文件 wb.save(dest_file) print(f"处理完成:{dest_file}")
关键修正说明
- 替换未定义的
main_df1为实际的源数据变量df_source,并重命名变量提升可读性 - 使用
openpyxl操作Excel单元格,避免pandas覆盖目标文件原有格式 - 支持批量处理多个目标文件,只需在
destination_files列表中添加路径 - 优化查找逻辑,利用DataFrame索引实现更高效的匹配
注意事项
- 确保源文件
Fund name列无重复值,否则会返回第一个匹配项 - 按需调整目标文件中用于匹配的基金名称单元格位置(示例中是A1)
- 运行前需安装依赖库:
pip install pandas openpyxl
内容的提问来源于stack exchange,提问作者Jiaqi MA
相关产品推荐
相关产品推荐

