【发布时间】:2017-05-18 19:40:13
【问题描述】:
我想从多个文件创建一个矩阵。这些文件中的每一个都有一个不同长度的基因名称列表。
要创建矩阵,我需要对第一列中所有文件中的所有基因名称进行分组。
然后为每个文件添加一个新列(以文件名作为标题),如果基因名称在附加列表中,则将值 1 添加到单元格中,否则如果第一列中的基因名称在追加的新列加零。
这是我到目前为止得到的:
import os
files= os.listdir("/gene_files")
df01 = pd.DataFrame()
for file in files:
file_name = "/gene_files/" + file
for file in file:
df = pd.read_csv(file, sep='\t', header = 0)
df01 = pd.concat(df01,df)
df01.to_csv('gene_matrix.csv')
这给了我一列中的所有基因列表。然后我删除所有重复项。
df01 = df01.drop_duplicates
现在我需要为每个文件添加一个新列,评估geneName(file) 是否在第一列并相应地添加 1 或 0。我被困住了……而且完全糊涂了。
文件如下所示:
File1 File2 File3 etc...
GeneName GeneName GeneName
A B A
B C B
C D E
F E F
我想要的输出是矩阵/数据框:
GeneName File1 File2 File3
A 1 0 1
B 1 1 1
C 1 1 0
D 0 1 0
E 0 1 1
F 1 0 1
这些是文件的实际前几行:
fileAIB fileAIC fileAID
Plekha4 Dffb Rabggta
1700012D01Rik A430033K04Rik Sc5d
Isg20 Tubb3 Gnpnat1
Smad6 Rbm17 Nabp1
Ndufa10 Isg20 Isg20
Wdr90 Arrb2 Lrrc27
Thumpd1 Ankrd13c Add3
Cd2bp2 Ndufa10 Prkaa1
Cndp2 Inpp5e Gmeb2
Jmjd1c Lamtor2 B4galt7
输出如下:
GeneName fileAIB fileAIC fileAID
Plekha4 1 0 0
1700012D01Rik 1 0 0
Isg20 1 1 1
Smad6 1 0 0
Ndufa10 1 0 0
Wdr90 1 0 0
Thumpd1 1 0 0
Cd2bp2 1 0 0
Rbm17 1 0 1
Jmjd1c 1 0 0
Dffb 0 1 0
A430033K04Rik 0 1 0
Tubb3 0 1 1
Rbm17 0 1 0
Arrb2 0 1 0
Ankrd13c 0 1 0
Ndufa10 0 1 0
Gnpnat1 0 1 0
Lamtor2 0 1 0
Rabggta 0 0 1
Sc5d 0 0 1
Gnpnat1 0 0 1
Lrrc27 0 0 1
Prkaa1 0 0 1
Gmeb2 0 0 1
B4galt7 0 0 1
【问题讨论】:
-
为什么第二个
for循环之后的行由于缩进而无法编译?geneName()是什么?定义的函数?请展示一些数据来说明。 -
哦,对不起.. () 只是为了澄清我需要将文件中的基因名称与第一列进行比较。甚至没想到它看起来像一个函数。
-
我们能看到文件的内容吗?和数据框,尤其是第一列?期望的结果也会很棒。只需要几行。帮助我们帮助您。
-
编辑了问题以包含一些内容。这个可以吗?我不知道如何分享它。