Pandas提取类VLOOKUP结果后无法写入/追加Excel,求解决
问题与解决方案
问题描述
需要实现类似VLOOKUP的功能:从第一个Excel中提取符合条件的数据,已通过Pandas成功提取出目标Series(df4)。但尝试将该结果写入或追加到第二个Excel文件的指定列时,无任何反应且无报错,先后使用pd.ExcelWriter写入、append方法追加均未生效。
代码问题分析
首次写入失败原因
使用pd.ExcelWriter时,仅调用to_excel()但未执行保存操作,数据只停留在内存中,没有写入到磁盘文件。
追加操作失败原因
- 仅在内存中完成了Series的追加(
append),但没有将最终结果写回原Excel文件; - Pandas的
append方法已被弃用,推荐使用pd.concat替代; - 循环处理工作表后未执行写入保存步骤。
修正后的代码
1. 正确写入数据到Excel
使用with上下文管理器自动处理文件的打开与保存,避免遗漏保存步骤:
# 假设df4是已提取好的目标Series with pd.ExcelWriter(r'C:\data\remplissage.xls', mode='w') as writer: df4.to_excel(writer, sheet_name='Nom_Mapservice', index=False)
mode='w'表示覆盖写入,若要保留原有工作表需改用.xlsx格式,配合mode='a'和engine='openpyxl'(.xls格式不支持追加)。
2. 正确追加数据到指定列
先读取目标工作表,将新数据追加到指定列后写回文件:
import pandas as pd # 读取目标Excel的指定工作表 target_sheet = 'Nom_Mapservice' # 替换为实际工作表名 df_target = pd.read_excel(r'C:\data\remplissage.xlsx', sheet_name=target_sheet) # 确保df4的列名与目标列一致 df4 = df4.rename('Tables dans DEV (bases de données sde)') # 用pd.concat替代append完成追加 df_updated = pd.concat([df_target, df4.to_frame()], ignore_index=True) # 将更新后的数据写回Excel with pd.ExcelWriter(r'C:\data\remplissage.xlsx', mode='w', engine='openpyxl') as writer: df_updated.to_excel(writer, sheet_name=target_sheet, index=False)
完整提取+写入/追加流程示例
整合数据提取与写入逻辑,避免重复读取文件:
import pandas as pd # 提取数据部分 source_file = r'Y:\SIG-DROPBOX\3_Centre_de_Ressources\METADONNEES\SuiviGlobalMetadonnees.xlsm' df_sheets = pd.read_excel(source_file, None) extracted_data = [] for sheet_name in df_sheets: df = df_sheets[sheet_name] filtered_df = df[df["valide"]=="oui"] target_col = f"Tables dans {sheet_name} (bases de données sde)" extracted_series = filtered_df[target_col] extracted_data.append(extracted_series) print(f"已提取工作表 {sheet_name} 的数据") # 合并所有提取结果 combined_data = pd.concat(extracted_data, ignore_index=True) # 写入/追加到目标Excel target_file = r'C:\data\remplissage.xlsx' target_sheet = 'Nom_Mapservice' try: # 读取现有文件追加数据 existing_df = pd.read_excel(target_file, sheet_name=target_sheet) final_df = pd.concat([existing_df, combined_data.to_frame()], ignore_index=True) except FileNotFoundError: # 文件不存在则新建 final_df = combined_data.to_frame() with pd.ExcelWriter(target_file, mode='w', engine='openpyxl') as writer: final_df.to_excel(writer, sheet_name=target_sheet, index=False) print("数据写入/追加完成")
内容的提问来源于stack exchange,提问作者Daniel Pochoclin Rouffart
相关产品推荐
相关产品推荐

