如何从多维NumPy数组生成多份合并CSV文件
解决方案
核心思路
用Pandas处理数据拼接与CSV导出更高效,核心步骤如下:
- 将8个NumPy数组按周维度对应到指定列
- 为每个建筑单独提取数据,添加周索引列
- 计算非索引列的平均值并追加到数据末尾
- 导出为符合要求的CSV文件
完整代码示例
import numpy as np import pandas as pd # 模拟用户的8个NumPy数组(示例:2个建筑,20周) # 对应列:Opt_cost, Opt_neg, CC_cost, CC_neg, PSC_cost, PSC_neg, ANN_cost, ANN_neg opt_cost = np.random.rand(2, 20) * 100 opt_neg = np.random.rand(2, 20) * 10 cc_cost = np.random.rand(2, 20) * 100 cc_neg = np.random.rand(2, 20) * 10 psc_cost = np.random.rand(2, 20) * 100 psc_neg = np.random.rand(2, 20) * 10 ann_cost = np.random.rand(2, 20) * 100 ann_neg = np.random.rand(2, 20) * 10 # 把数组和列名绑定,方便后续处理 data_dict = { "Opt_cost": opt_cost, "Opt_neg": opt_neg, "CC_cost": cc_cost, "CC_neg": cc_neg, "PSC_cost": psc_cost, "PSC_neg": psc_neg, "ANN_cost": ann_cost, "ANN_neg": ann_neg } num_buildings = opt_cost.shape[0] # 获取建筑数量 num_weeks = opt_cost.shape[1] # 获取周数 # 循环处理每个建筑 for building_idx in range(num_buildings): # 1. 提取当前建筑的所有周数据 building_data = {} for col_name, arr in data_dict.items(): building_data[col_name] = arr[building_idx, :] # 2. 添加周索引列(从1开始计数) building_data["Week (index)"] = np.arange(1, num_weeks + 1) # 3. 转换为DataFrame并调整列顺序,确保周索引在第一列 df = pd.DataFrame(building_data) df = df[["Week (index)", "Opt_cost", "Opt_neg", "CC_cost", "CC_neg", "PSC_cost", "PSC_neg", "ANN_cost", "ANN_neg"]] # 4. 计算平均值行:排除周索引列,求均值后保留一位小数 avg_row = df.drop("Week (index)", axis=1).mean().round(1) avg_row["Week (index)"] = "Average" # 周索引位置标注为Average # 把平均值行追加到原数据末尾 df = pd.concat([df, pd.DataFrame([avg_row])], ignore_index=True) # 5. 导出CSV文件,文件名示例:building_1.csv、building_2.csv df.to_csv(f"building_{building_idx + 1}.csv", index=False)
关键细节说明
- 数组对应:确保
data_dict的键与CSV列名完全匹配,列顺序可通过DataFrame的列排序修正 - 周索引:若需要从0开始计数,把
np.arange(1, num_weeks + 1)改成np.arange(num_weeks)即可 - 平均值处理:用
drop排除周索引列后计算均值,round(1)保证保留一位小数,最后给周索引位置标注"Average" - 导出设置:
index=False避免将DataFrame的默认索引写入CSV文件
内容的提问来源于stack exchange,提问作者PeterBe
相关产品推荐
相关产品推荐

