Python规范化失败的数字列表/按行规范化

2024-06-10 19:05:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多不同样品的质谱图。我正在尝试对每个样本的信号强度进行标准化,以便在样本之间进行比较。你知道吗

为此,我循环遍历每个文件,将数据整理成一个数据帧,每个样本放在一行上,列作为变量。因此,单元格保存与样本和变量相关的值。你知道吗

当我填充数据帧时,我尝试将列表(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?你知道吗


编辑: 输入数据示例:

http://dumptext.com/8ky1RX8F

Example Output

示例输出文件(未标准化)

所以每一行(每一个样本)被标准化为它的值的总和。你知道吗


Tags: 文件数据informforlocrelra
1条回答
网友
1楼 · 发布于 2024-06-10 19:05:15

我假设CSV文件中的第一个未命名列是"Sample#",所以我在输入CSV文件中将它命名为Sample。你知道吗

除此之外,我还稍微修改了输入数据,这样每个Sample#就有几个"Rel. Abundance","Formula"。你知道吗

下面是我想到的:

from __future__ import print_function

import pandas as pd

df = pd.read_csv('data.csv', sep=',', usecols=['Sample', 'Rel. Abundance', 'Formula'])

# pivot input data
pvt = df.pivot(index='Sample', columns='Formula', values='Rel. Abundance').fillna(0).reset_index().set_index('Sample')
print(pvt)

# normalize data
norm = pvt.div(pvt.sum(axis=1), axis=0)

# check sum of rows
norm['sum'] = norm.sum(axis=1)

# output
print(norm)

输出:

Formula  C10H16O2  C10H16O3  C10H18O2  C10H18O3    C10H20O2  C11H20O2  \
Sample                                                                  
0               0         0         0         0           0         0   
1         5300142         0         0         0           0         0   
2               0         0  22442914         0           0         0   
3               0         0         0         0  8355451392         0   
4               0   4886962         0         0           0  16859592   
5               0         0         0  16221800           0         0   

Formula  C8H14O4  C9H10O4  C9H14O4   C9H18O2   C9H18O3  
Sample                                                  
0              0  5157540        0  70453296         0  
1        5217051        0        0         0         0  
2              0        0        0         0         0  
3              0        0        0         0  11975477  
4              0        0        0         0         0  
5              0        0  6799955         0         0  
Formula  C10H16O2  C10H16O3  C10H18O2  C10H18O3  C10H20O2  C11H20O2  C8H14O4  \
Sample                                                                         
0         0.00000  0.000000         0  0.000000  0.000000  0.000000  0.00000   
1         0.50395  0.000000         0  0.000000  0.000000  0.000000  0.49605   
2         0.00000  0.000000         1  0.000000  0.000000  0.000000  0.00000   
3         0.00000  0.000000         0  0.000000  0.998569  0.000000  0.00000   
4         0.00000  0.224724         0  0.000000  0.000000  0.775276  0.00000   
5         0.00000  0.000000         0  0.704629  0.000000  0.000000  0.00000   

Formula   C9H10O4   C9H14O4   C9H18O2   C9H18O3  sum  
Sample                                                
0        0.068212  0.000000  0.931788  0.000000    1  
1        0.000000  0.000000  0.000000  0.000000    1  
2        0.000000  0.000000  0.000000  0.000000    1  
3        0.000000  0.000000  0.000000  0.001431    1  
4        0.000000  0.000000  0.000000  0.000000    1  
5        0.000000  0.295371  0.000000  0.000000    1  

输出说明:

第一个DF-pvt数据透视输入数据

第二个DF-norm标准化DF(由数据透视数据组成)

相关问题 更多 >