如何在for循环中将结果保存为同一文件的不同列(避免覆盖)
解决循环保存结果为同一文件不同列的问题
你的代码每次循环调用np.savetxt()时会直接覆盖整个文件,导致之前的结果丢失。要实现将每次循环的结果作为不同列保存,需要先收集所有计算结果,再一次性写入文件,以下是两种可行的实现方式:
方法一:使用Pandas处理(推荐,更直观)
利用Pandas的DataFrame来管理列数据,所有文件处理完成后统一保存:
import pandas as pd import os import numpy as np def get_df(): result_df = pd.DataFrame() os.chdir("C:/Users/s/Desktop/P") for file in os.listdir(): if file.endswith('.csv'): # 补充读取CSV文件到数组a的逻辑(原代码缺失此步骤,需根据实际调整) a = pd.read_csv(file).values av_a = np.average(a, axis=0) # 将当前平均值作为新列加入DataFrame,用文件名作为列名便于区分 result_df[file] = av_a # 一次性保存所有列到CSV result_df.to_csv('merged_average.csv', index=False)
方法二:使用Numpy处理
通过收集所有结果数组,再按列拼接后保存:
import os import numpy as np def get_df(): all_avgs = [] os.chdir("C:/Users/s/Desktop/P") for file in os.listdir(): if file.endswith('.csv'): # 读取CSV文件到numpy数组 a = np.loadtxt(file, delimiter=',') av_a = np.average(a, axis=0) all_avgs.append(av_a) # 将所有结果按列拼接成二维数组 merged_data = np.column_stack(all_avgs) # 写入文件 np.savetxt('merged_average.csv', merged_data, delimiter=',')
关键说明
- 原代码缺失从CSV文件读取数据到变量
a的逻辑,上述代码中已补充基础读取方式,请根据你的实际数据格式调整读取部分。 - 两种方法均避免了循环中重复写入文件导致的覆盖问题,而是先汇总所有结果再一次性输出。
内容的提问来源于stack exchange,提问作者hannabellamontaha
相关产品推荐
相关产品推荐

