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

如何在Pandas循环中拼接DataFrame的Abs列并统计均值/中位数?

批量处理CSV吸光度数据:拼接列并计算统计量

看起来你已经搭好了批量读取文件的基础框架,接下来只需要把每个文件的Abs列收集到同一个DataFrame里,再按行计算统计量就可以了。我帮你优化了代码,直接就能用:

完整代码示例

import pandas as pd
import glob

# 获取目标文件夹下所有排序后的CSV文件路径
file_paths = sorted(glob.glob('blanks/Day01/Batch02/*.csv'))

# 初始化结果DataFrame:先读取第一个文件的波长列作为基础
result_df = pd.read_csv(file_paths[0], skiprows=1, delimiter=',')[['Wavelength (nm)']]

# 遍历每个文件,提取Abs列并加入结果表
for file_path in file_paths:
    # 用文件名作为Abs列的名称(去掉.csv后缀,方便识别来源)
    col_name = file_path.split('/')[-1].replace('.csv', '')
    # 读取当前文件的Abs列
    df = pd.read_csv(file_path, skiprows=1, delimiter=',')
    
    # 可选:检查当前文件的波长列是否和基准一致,避免数据错位
    if not df['Wavelength (nm)'].equals(result_df['Wavelength (nm)']):
        print(f"⚠️ 警告:文件 {col_name} 的波长列与其他文件不匹配,已跳过该文件")
        continue
    
    # 将Abs列加入结果表
    result_df[col_name] = df['Abs']

# 计算统计列:均值、中位数、标准差(按行计算,对应每个波长的统计值)
result_df['Abs_Mean'] = result_df.drop('Wavelength (nm)', axis=1).mean(axis=1)
result_df['Abs_Median'] = result_df.drop('Wavelength (nm)', axis=1).median(axis=1)
result_df['Abs_Std'] = result_df.drop('Wavelength (nm)', axis=1).std(axis=1)

# 保存最终统计结果到新CSV
result_df.to_csv('blanks/Day01/Batch02/abs_statistics.csv', index=False)

关键细节说明

  • 列命名:用文件名作为每个Abs列的名称,后续你能清楚知道每个数据来自哪个文件,排查问题更方便。
  • 波长一致性检查:加了可选的检查步骤,防止因为某个文件波长错位导致统计结果出错,如果你的数据确认波长完全一致,可以删掉这段。
  • 统计量计算:mean(axis=1)和median(axis=1)是按行计算,也就是针对每个波长,计算所有文件吸光度的均值/中位数,这正是实验数据分析中常用的统计方式。
  • 结果保存:最终生成的CSV会包含原始所有文件的Abs列,加上你需要的均值、中位数、标准差列,方便后续分析或绘图。

如果你的数据集里有空文件或者格式异常的文件,还可以在读取时加上try-except块来捕获错误,避免程序中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:25