我想从多个文件创建一个矩阵。每个文件都有不同长度的基因名列表。在
要创建矩阵,我需要将第一列中所有文件中的所有基因名分组。在
然后为每个文件附加一个新列(以文件名为标题),如果基因名在附加列表中,则向单元格添加值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')
这给了我一列所有的基因列表。然后我把所有的复制品都放下。在
^{pr2}$现在我需要为每个文件追加一个新列,计算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
考虑将所有文本文件数据附加到长格式数据帧中,然后旋转到宽格式:
输出(使用已发布的实际三列作为.txt文件)
^{pr2}$您应该能够很容易地做到这一点,方法是将基因名放入索引中,并以文件名作为列名创建一个包含所有基因的列,然后进行连接。这应该在一个for循环中完成。当前的for循环语法不正确。尝试以下类似的方法,假设从
read_csv
读取时,有一个列名为“GeneName”的单列数据帧。在尝试将
pd.concat()
与axis
属性一起使用。在您的情况下:df01 = pd.concat([df01, df], axis=1)
在使用
df.columns = [filename]
为新数据帧指定列名之前。在相关问题 更多 >
编程相关推荐