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

如何用Python批量处理101个CSV文件:平方第二列并按行平均

批量处理CSV文件:第二列平方后按行求平均

以下是实现需求的完整代码,包含批量读取、平方计算、行平均、结果保存与可视化:

import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt

# 目标文件夹路径
folder_path = r'C:\Users\Den\Desktop\SPD'

# 获取文件夹下所有CSV文件(过滤非CSV文件)
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]

# 存储所有文件第二列平方后的数据
squared_data = []

# 批量读取并处理每个CSV文件
for file in csv_files:
    file_path = os.path.join(folder_path, file)
    # 读取CSV,分隔符为;
    data = pd.read_csv(file_path, sep=';')
    # 提取S列,计算平方后转为numpy数组
    y_squared = data['S'].to_numpy() ** 2
    squared_data.append(y_squared)

# 将列表转为numpy数组,方便进行矩阵运算
squared_array = np.array(squared_data)
# 按行计算平均值(axis=0表示对所有文件的同一行数据求平均)
row_averages = np.mean(squared_array, axis=0)

# 获取频率轴数据(取第一个文件的W列,假设所有文件的频率列一致)
first_data = pd.read_csv(os.path.join(folder_path, csv_files[0]), sep=';')
x = first_data['W'].to_numpy()

# 保存平均结果到新CSV
result_df = pd.DataFrame({
    'W': x,
    'Average_S_Squared': row_averages
})
result_df.to_csv(os.path.join(folder_path, 'average_spd_squared.csv'), sep=';', index=False)

# 绘制平均后的频谱曲线
plt.figure(figsize=(10, 6))
plt.plot(x, row_averages, label='平均平方SPD')
plt.xlabel('频率 (W)')
plt.ylabel('平均频谱功率密度平方')
plt.title('101组SPD数据平方后的行平均结果')
plt.grid(True)
plt.legend()
plt.show()

关键步骤说明:

  • 批量读取文件:通过os.listdir遍历目标文件夹,筛选出所有CSV文件,避免手动逐个指定路径。
  • 平方计算:对每个文件的S列直接进行元素级平方运算(** 2),效率高于循环处理单个元素。
  • 行平均计算:利用numpy的mean函数,指定axis=0实现对所有文件的同一行数据求平均,这正是你需要的"按行取所有文件对应行的平方值求平均"逻辑。
  • 结果保存:将频率列和平均结果合并为DataFrame,保存为新的CSV文件,方便后续分析。
  • 可视化:基于第一个文件的频率轴数据,绘制平均后的曲线,直观展示结果。

注意事项:

  • 确保所有CSV文件的列名均为W(频率)和S(频谱功率密度),如果存在列名不一致的情况,可修改代码中data['S']为对应列名,或通过索引(如data.iloc[:,1])提取第二列。
  • 如果文件数量较多,numpy的矩阵运算会比循环求平均效率高很多,适合处理101个文件的规模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:30:23