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

质谱CSV文件双组值拆分及m/z范围值展开方法咨询

处理质谱CSV文件:展开m/z范围并拆分数据列

核心思路

先读取CSV内容,逐行解析m/z值:如果是范围格式(如150-2000),就拆分出起始和结束数值,生成连续整数序列;同时将对应y轴数据复制,和每个m/z值一一配对。最后将处理后的数据重新整理成标准的两列(m/z、信号强度)格式,保存为新的CSV。

用Python实现的具体代码

用pandas和numpy可以高效完成这个操作,代码如下:

import pandas as pd
import numpy as np

# 读取原始CSV(假设无表头,若有表头则修改header参数为0并调整列名)
df = pd.read_csv('原始质谱数据.csv', header=None, names=['mz_data', 'signal'])

# 定义处理函数:解析m/z值,展开范围
def expand_mz_range(mz_str):
    if '-' in mz_str:
        start, end = map(int, mz_str.split('-'))
        return np.arange(start, end + 1)
    else:
        return [int(mz_str)]

# 应用函数处理每一行,生成展开后的数据集
expanded_rows = []
for _, row in df.iterrows():
    mz_values = expand_mz_range(row['mz_data'])
    signal_value = row['signal']
    # 为每个展开的m/z值生成对应行
    for mz in mz_values:
        expanded_rows.append({'m/z': mz, '信号强度': signal_value})

# 转换为DataFrame并保存
result_df = pd.DataFrame(expanded_rows)
result_df.to_csv('处理后质谱数据.csv', index=False)

示例说明

  • 原始CSV行:150-152,85
  • 处理后生成3行:
    m/z,信号强度
    150,85
    151,85
    152,85
    
  • 原始CSV行:200,120(单个m/z值)
  • 处理后保留为:200,120

注意事项

  • 如果原始CSV自带表头,修改pd.read_csv的header参数为0,并调整names里的列名匹配你的文件。
  • 如果m/z值是小数(如150.5-2000.5),把代码里的int改为float,np.arange会自动生成连续小数序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:15:31