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

循环生成DataFrame写入Excel仅存最后一行,求合并写入方案

解决循环生成DataFrame写入Excel仅保留最后一行的问题

我看了你的代码和问题描述,核心问题出在循环内重复初始化数据容器和Excel写入器,导致每次迭代都会覆盖之前的内容。咱们一步步来修正:

你的代码里的关键问题

  • writer = pd.ExcelWriter(...) 和 appended_data = [] 被放在了for i in x的循环内部,每次循环都会重新创建空列表和写入器,之前迭代收集的数据直接丢失
  • 每次循环都调用writer.save(),这会直接覆盖整个Excel文件,最后只剩最后一次循环的内容
  • 内部循环for j in feature_num其实是在遍历DataFrame的列名,而不是你想要的行内数据,这会导致feature_name取数错误

修正后的代码

import pandas as pd

def CCC_90(df_1, x):
    # 1. 提前初始化全局的DataFrame容器,放在循环外面
    appended_data = []
    
    for i in x:
        print('------------------------------------------------------------------------------------------------------------------- ')
        feature_num = df_1.iloc[[i]]  # 取第i行的DataFrame
        feature_num_correct = feature_num + 21
        print(feature_num_correct)
        
        # 2. 遍历feature_num_correct的行数据,转换为一维数组后取对应feature_name
        for val in feature_num_correct.values.flatten():
            feature_name = dfFeaturename.iloc[[val]]
            appended_data.append(feature_name)
    
    # 3. 所有循环结束后,统一合并DataFrame,忽略原有索引避免混乱
    merged_df = pd.concat(appended_data, ignore_index=True)
    
    # 4. 最后一次写入Excel,使用with语句自动处理文件关闭与保存
    with pd.ExcelWriter('No3_dVSa.xlsx', engine='xlsxwriter') as writer:
        merged_df.to_excel(writer, sheet_name='Sheet1', startrow=1)

关键修改点说明

  • 把数据容器和写入器移到循环外:确保所有迭代的DataFrame都能被收集到同一个列表里,不会被每次循环重置清空
  • 统一合并与写入:等所有数据都收集完成后,一次性合并成一个大DataFrame,再写入Excel,彻底避免覆盖问题
  • 修正内部循环的遍历逻辑:用values.flatten()把feature_num_correct的行数据转成一维数组,确保能正确取到每个值对应的feature_name
  • 使用with语句管理ExcelWriter:更安全规范,会自动处理文件的关闭和保存,不用手动调用writer.save()

这样修改后,所有循环生成的DataFrame都会被合并成一个整体,一次性写入Excel,就不会出现只保留最后一行的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:07