Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在两个不同长度的数据帧列表上迭代,并将它们作为数据帧连接在一个循环中以执行一个函数_Python_Pandas_Numpy - Fatal编程技术网

Python 在两个不同长度的数据帧列表上迭代,并将它们作为数据帧连接在一个循环中以执行一个函数

Python 在两个不同长度的数据帧列表上迭代,并将它们作为数据帧连接在一个循环中以执行一个函数,python,pandas,numpy,Python,Pandas,Numpy,比如,我有两个数据帧列表。数据帧列表的大小为 len(list_df1) 20 list_df1 [ Gene_id TCGA-A1-A0SM-01A-11R-A084-07 \ 0 ENSG00000000003_PC 2.609759e+05 1 ENSG00000000005_PC 2.046517e+02 2 ENSG00000000419_P

比如,我有两个数据帧列表。数据帧列表的大小为

len(list_df1)
20
list_df1
[                 Gene_id  TCGA-A1-A0SM-01A-11R-A084-07  \
 0     ENSG00000000003_PC                  2.609759e+05   
 1     ENSG00000000005_PC                  2.046517e+02   
 2     ENSG00000000419_PC                  6.300425e+05   
 3     ENSG00000000457_PC                  7.922487e+04   
 4     ENSG00000000460_PC                  4.759842e+04   
 ...                  ...                           ...   
 999   ENSG00000067167_PC                  1.661041e+06   
 1000  ENSG00000067177_PC                  1.117150e+05   
 1001  ENSG00000067182_PC                  8.435913e+05   
 1002  ENSG00000067191_PC                  1.219213e+05   
 1003  ENSG00000067208_PC                  8.953860e+04   
 
       TCGA-A2-A04W-01A-31R-A115-07  TCGA-A2-A04X-01A-21R-A034-07  \
 0                     3.557029e+05                 112350.116669   
 1                     3.668742e+02                    678.138127   
 2                     9.395870e+05                 980843.179895   
 3                     7.663316e+04                  54672.074426   
 4                     3.543807e+04                  21895.818992   
 ...                            ...                           ...   
 999                   1.306383e+06                 652885.437844   
 1000                  1.706889e+05                  65106.955798   
 1001                  1.255371e+06                 634635.692737   
 1002                  4.121517e+04                  35705.970261   
 1003                  7.729493e+04                  51846.101598   
 
       TCGA-A2-A0D1-01A-11R-A034-07  TCGA-A2-A0EQ-01A-11R-A034-07  \
 0                     4.379606e+05                  2.218208e+05   
 1                     2.502301e+03                  1.585833e+03   
 2                     5.090120e+05                  6.800754e+05   
 3                     7.601743e+04                  6.207091e+04   
 4                     4.759907e+04                  4.022122e+04   
 ...                            ...                           ... 
对于第二个数据帧列表

len(list_df2)
15
list_df2
[                       Gene_id  TCGA-A1-A0SM-01A-11R-A084-07  \
 1580   ENSG00000082929_lncRNAs                    283.066402   
 1598   ENSG00000083622_lncRNAs                      0.000000   
 1995   ENSG00000093100_lncRNAs                    761.296884   
 2127   ENSG00000099869_lncRNAs                   4134.407284   
 2819   ENSG00000103472_lncRNAs                   4081.669994   
 ...                        ...                           ...   
 25447  ENSG00000224648_lncRNAs                      0.000000   
 25448  ENSG00000224649_lncRNAs                      0.000000   
 25450  ENSG00000224652_lncRNAs                  13698.679519   
 25452  ENSG00000224655_lncRNAs                    454.154778   
 25455  ENSG00000224658_lncRNAs                      0.000000   
 
        TCGA-A2-A04W-01A-31R-A115-07  TCGA-A2-A04X-01A-21R-A034-07  \
 1580                   16745.726795                      0.000000   
 1598                       0.000000                      0.000000   
 1995                    1091.806755                    504.529752   
 2127                    2058.792103                      0.000000   
 2819                    4541.654924                  12125.955565   
 ...                             ...                           ...   
 25447                      0.000000                      0.000000   
 25448                   1806.322490                      0.000000   
 25450                  20679.823343                   8560.813731   
 25452                      0.000000                      0.000000   
 25455                      0.000000                      0.000000   
 
        TCGA-A2-A0D1-01A-11R-A034-07  TCGA-A2-A0EQ-01A-11R-A034-07  \
 1580                   79172.350419                    365.577246   
 1598                       0.000000                      0.000000   
 1995                     698.135025                    294.962048   
 2127                    1053.164305                      0.000000   
 2819                    4517.449536                   9633.998928   
 ...                             ...                           ...   
 25447                      0.000000                      0.000000   
 25448                      0.000000                      0.000000   
 25450                   6887.145309                    931.142046   
 25452                    347.062760                    293.268032   
 25455                   1619.254228                      0.000000   
 
        TCGA-A2-A0T1-01A-21R-A084-07  TCGA-A2-A3XV-01A-21R-A239-07  \
 1580                    1024.779160                  29452.491771   
 1598                       0.000000                      0.000000   
 1995                     551.221323                    243.727431   
 2127                     415.769586                    551.508707   
 2819                   10530.579870                   2027.695619   
 ...                             ...                           ...  
现在,我需要的是,将两个列表中的数据帧连接成更小的数据帧,并为每个数据帧运行一个函数

假设我的功能是进行相关性分析

import pandas as pd
from scipy.stats import pearsonr
    def correlation(df):
        correlations = pd.DataFrame()
    for PC in [column for column in df.columns if '_PC' in column]:
        for lncRNA in [column for column in df.columns if '_lncRNAs' in column]:
             correlations = correlations.append(pd.Series(pearsonr(df[PC],df[lncRNA]),index=['PCC', 'p-value'],name=PC + '_' +lncRNA))
我需要对上面列表中的每个连接数据帧使用上述函数。 例如,这就是我所尝试的

for dfs,dfs2 in zip(list_df1,list_df2):
    #print(dfs.iloc[0:2,0:2],dfs2.iloc[0:2,0:2])
    df     = dfs
    df2    = dfs2
    DF = pd.concat([dfs,dfs2])
    
DF_T =DF.set_index("Gene_id").T
DF_T如下所示:

  DF_T.shape()
(75, 1073)
但是,
DF\u T
只是上面定义的两个列表
(列表df1,列表df2)
中最后一个数据帧的串联。因此,如果我对数据帧
DF_T
运行
correlation
函数,它将仅对列表中的最后一个数据帧执行相关性分析。然而,我的目标是从两个列表中运行所有小的连接数据帧

因此,我正在寻找一种方法,可以分别从两个列表中提取所有数据帧。然后,将它们连接到不同的数据帧中。最后,对每个连接的数据帧应用
correlation
函数。所有这些都是为了提高相关函数的性能和速度。我的输入是多个大数据帧


非常感谢您的帮助和建议

使用您自己的代码,应该可以:

def correlation(list_df1,list_df2):
    correlations = pd.DataFrame()
    for dfs,dfs2 in zip(list_df1,list_df2):
        DF = pd.concat([dfs,dfs2])
        df = DF.set_index("Gene_id").T
        for PC in [column for column in df.columns if '_PC' in column]:
            for lncRNA in [column for column in df.columns if '_lncRNAs' in column]:
                 correlations = correlations.append(pd.Series(pearsonr(df[PC],df[lncRNA]),index=['PCC', 'p-value'],name=PC + '_' +lncRNA))    

   return correlations

由于采用了简单的解决方案,拆分和级联的主要原因是降低了在相关分析函数中运行巨大数据帧的计算成本。目前,我正在尝试你的解决方案。它还没有完成。一旦我完成,我可以给你更新。同时,我想问一下,在转换数据帧之后,它是维度
(741200),(1223000),(5003000)
等等。其中,我当前的函数需要花费很长时间才能返回输出。我想有一些高效或更快的方法来完成这项任务。谢谢again@user1017373第一个循环是不可避免的。可以通过先过滤数据帧列,然后使用
.corr()
函数计算列之间的成对相关性来替换内部循环。不过,不确定它是否会显著改进。感谢您的建议,我添加了一个过滤器,以在超过50%的列为0时删除行<代码>DF=DF[DF.平均值(轴=1)>=0.50]在相关函数之前。但是,它仍然在运行,因此,我无法更新是否作为一种成功的方法。通过过滤列,我的意思是
df=df[column for column in df.columns if((“PC”in column)或(“lncRNAs”in column))]
,然后是类似
df.corr()
的内容。我希望删除所有0行将更改相关性值。好的,我明白了。我不确定,我如何才能添加一个过滤器的系列。这里的
df[PC]
df[lncRNA]
是系列。如果你能给我举个例子,那就太好了?非常感谢。