下記の2つのテキストファイルがあります。
<gene_name.txt>
ens_gene ext_gene
1 ENSG00000210049 MT-TF
2 ENSG00000211459 MT-RNR1
3 ENSG00000210077 MT-TV
4 ENSG00000210082 MT-RNR2
5 ENSG00000209082 MT-TL1
... ... ...
67136 ENSG00000284921 AC004852.4
67137 ENSG00000285440 AC004852.6
67138 ENSG00000285110 AC004852.5
67139 ENSG00000285363 MTRF1LP2
67140 ENSG00000285114 GSDMC
[67140 rows x 2 columns]
<test_FPKM.txt>
0
0 ENSG00000242268.2
1 ENSG00000270112.3
2 ENSG00000167578.15
3 ENSG00000273842.1
4 ENSG00000078237.5
... ...
60478 ENSG00000105063.17
60479 ENSG00000231119.2
60480 ENSG00000280861.1
60481 ENSG00000123685.7
60482 ENSG00000181518.3
[60483 rows x 1 columns]
test_FPKM.txtの各行からgene_name.txtのens_geneと同じ名前を探し、見つかった場合に該当するext_geneを紐付ける、という作業をしています。
下記のコードを書いてみましたが、一応正しく動いていそうです。
python
1 2import pandas as pd 3 4df = pd.read_table('test_FPKM.txt',index_col=0) 5df2 = pd.read_table('gene_name.txt',index_col=0) 6 7df_gene = pd.DataFrame(df2.iloc[:,0]) 8gene_name_list = [] 9for n in range (len(df)): 10 a = df_gene.iloc[n,0] 11 for p in range (len(df)): 12 b = df.iloc[p,0] 13 if a in b: 14 gene_name = df2.iloc[n,1] 15 gene_name_list.append(gene_name) 16print(gene_name_list) 17 18実行結果→ 19$ gene_name_for_FPKM.py 20['MT-RNR1', 'MT-TL1', 'MT-ND1', 'MIR8081', 'RNU1-47P', 'RNU6-919P', 'RN7SL193P', 'AC006963.1', 'RNA5SP183', 'AC006960.1', 'AC096917.1', 'RNVU1-2A', 'RN7SL541P'] 21
2つのファイルは行数が異なります。
また、<test_FPKM.txt>に含まれる文字列は、<gene_name.txt>のens_gene列に小数点以下の数字が付与されています。
ただ、全本のファイルはそれぞれ65,000行くらいあり、全体のデータで処理すると動きません。
もっと効率良いコードにするにはどのように改変すればよいか、教えていただければと思います。
また、Linuxコマンドでもできそうな気がするのですが、ご存知のかたいたらよろしくお願いいたします。