质谱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
相关产品推荐
相关产品推荐

