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

Pandas提取类VLOOKUP结果后无法写入/追加Excel,求解决

问题与解决方案

问题描述

需要实现类似VLOOKUP的功能:从第一个Excel中提取符合条件的数据,已通过Pandas成功提取出目标Series(df4)。但尝试将该结果写入或追加到第二个Excel文件的指定列时,无任何反应且无报错,先后使用pd.ExcelWriter写入、append方法追加均未生效。

代码问题分析

首次写入失败原因

使用pd.ExcelWriter时,仅调用to_excel()但未执行保存操作,数据只停留在内存中,没有写入到磁盘文件。

追加操作失败原因

  1. 仅在内存中完成了Series的追加(append),但没有将最终结果写回原Excel文件;
  2. Pandas的append方法已被弃用,推荐使用pd.concat替代;
  3. 循环处理工作表后未执行写入保存步骤。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:15:36