我有很多不同样品的质谱图。我正在尝试对每个样本的信号强度进行标准化,以便在样本之间进行比较。你知道吗
为此,我循环遍历每个文件,将数据整理成一个数据帧,每个样本放在一行上,列作为变量。因此,单元格保存与样本和变量相关的值。你知道吗
当我填充数据帧时,我尝试将列表(sample)与它本身的总数进行标准化,这样最终数据帧中的每一行加起来就是1。你知道吗
例如:
for y in files:
df2 = pd.read_csv(inputloc+y,index_col=0)
totalRA = df2["Rel. Abundance"]
totalRAlist = totalRA.tolist()
totalRAsum = sum(totalRAlist)
for i in range(len(df2)):
form = df2.loc[i]["Formula"]
RA = df2.loc[i]["Rel. Abundance"]
RAnorm = float(abs(RA)/totalRAsum)
outputdata.loc[y[:-9]][form] = RAnorm
据我所知,它正确地填充了数据帧,但是当我对每一行求和时:
outputdata.T.sum()
我的大多数样本的值都小于1.0。总和低至0.747389,这表明它不仅仅是一个截断/浮动问题?你知道吗
我尝试通过添加一个求和变量并通过循环打印来调试它。 一、 e
a = 0
for i in range(len(df2)):
form = df2.loc[i]["Formula"]
RA = df2.loc[i]["Rel. Abundance"]
RAnorm = float(abs(RA)/totalRAsum)
a = a + RAnorm
print a
对于每个样本,总是加起来等于1。你知道吗
因此,我不知道我错在哪里。你知道吗
或者,有没有一种简单的方法来标准化熊猫数据帧的每一行,使每一行的总和为1?你知道吗
编辑: 输入数据示例:
示例输出文件(未标准化)
所以每一行(每一个样本)被标准化为它的值的总和。你知道吗
我假设CSV文件中的第一个未命名列是
"Sample#"
,所以我在输入CSV文件中将它命名为Sample
。你知道吗除此之外,我还稍微修改了输入数据,这样每个
Sample#
就有几个"Rel. Abundance","Formula"
。你知道吗下面是我想到的:
输出:
输出说明:
第一个DF-
pvt
数据透视输入数据第二个DF-
norm
标准化DF(由数据透视数据组成)相关问题 更多 >
编程相关推荐