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

如何修改Python代码将多个.npy数据合并写入单个Excel文件?

问题:合并多个NPY文件的统计结果到单个Excel文件

现有代码会为每个输入的.npy文件生成独立的Excel文件,需求是将所有.npy文件的统计数据以行的形式整合到同一个Excel文件中。

原代码:

import numpy as np
import pandas as pd
from pathlib import Path

in_folder = Path("input folder directory")
out_folder = Path("output folder directory")

for in_file in in_folder.glob("*.npy"):
    out_file = out_folder / in_file.name.replace("_x.npy", "_data.xlsx")
    data = np.load(str(in_file))
    percentage_coverage = ((np.count_nonzero(data == 3) / (np.count_nonzero(data == 3) + np.count_nonzero(data == 2) + np.count_nonzero(data == 4))) * 100)
    df = pd.DataFrame({'Percentage of Coverage': [percentage_coverage],
                       'Plaque Pixel Number': [np.count_nonzero(data == 3)],
                       'Brain Pixel Number': [np.count_nonzero(data == 2)],
                       'Not Brain Pixel Number': [np.count_nonzero(data == 1)],
                       'Fold Pixel Number': [np.count_nonzero(data == 4)]})
    writer = pd.ExcelWriter(str(out_file), engine = 'xlsxwriter')         
    df.to_excel(writer, sheet_name = 'Sheet1', index = False)
    writer.close()

修改后的代码

import numpy as np
import pandas as pd
from pathlib import Path

in_folder = Path("input folder directory")
out_folder = Path("output folder directory")
# 创建空列表存储所有文件的统计数据
all_stats = []

for in_file in in_folder.glob("*.npy"):
    data = np.load(str(in_file))
    # 提前计算各类像素数量,避免重复调用count_nonzero
    plaque_count = np.count_nonzero(data == 3)
    brain_count = np.count_nonzero(data == 2)
    not_brain_count = np.count_nonzero(data == 1)
    fold_count = np.count_nonzero(data == 4)
    # 计算覆盖率
    percentage_coverage = (plaque_count / (plaque_count + brain_count + fold_count)) * 100
    # 将当前文件的统计结果(含文件名便于区分)存入字典,添加到列表
    file_stats = {
        'Filename': in_file.name,
        'Percentage of Coverage': percentage_coverage,
        'Plaque Pixel Number': plaque_count,
        'Brain Pixel Number': brain_count,
        'Not Brain Pixel Number': not_brain_count,
        'Fold Pixel Number': fold_count
    }
    all_stats.append(file_stats)

# 将所有统计数据合并为一个DataFrame,每个文件对应一行
combined_df = pd.DataFrame(all_stats)
# 设置统一的输出文件路径
output_file = out_folder / "combined_stats.xlsx"
# 写入单个Excel文件
writer = pd.ExcelWriter(str(output_file), engine='xlsxwriter')
combined_df.to_excel(writer, sheet_name='Sheet1', index=False)
writer.close()

关键改动说明

  • 新增空列表all_stats,用于集中收集每个文件的统计数据,避免循环中重复创建和写入Excel
  • 循环内不再单独生成Excel文件,而是将每个文件的统计结果(新增文件名字段便于溯源)以字典形式存入列表
  • 循环结束后,一次性将列表转换为DataFrame,此时每个文件的统计结果自动对应一行数据
  • 最后统一将合并后的DataFrame写入单个Excel文件,完成需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:15:42