查找模式是否匹配,然后从另一列$|$separator failu输出分割数据

2024-09-25 08:37:38 发布

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

作为较长代码的一部分,我在尝试执行以下操作时遇到了障碍: 我有一个3列的库:[ClusterID,Human,Mouse]

ClusterID   Human   Mouse
50  LongAUGORFlinc|3P|XLOC_076196|TCONS_00295623:0.269513|182AA|167AA|$|$linc|3P|XLOC_037932|TCONS_00153577:0.957089|101AA|56AA|$|$linc|3P|XLOC_048756|TCONS_00195334:1.35817|128AA|73AA|   linc|3P|XLOC_066319|TCONS_00127223:1.0925|85AA|41AA|$|$LongAUGORFEnsASCoding|3P|XLOC_104581|TCONS_00206607|Nr2f2:0.354897|174AA|162AA||RNACodeAS|HSS_32160_5.3E-14$HSS_32161_6.4E-9$HSS_32163_3.9E-11$HSS_32164_6.5E-6$HSS_32165_4.7E-6$HSS_32166_1.7E-7$HSS_32168_8.1E-6$HSS_32169_3.2E-8$|$LongAUGORFEnsASCoding|3P|XLOC_113060|TCONS_00223512|Sugp1:1.20904|141AA|141AA||RNACodeAS|NearGap
81  EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA|$|$LongAUGORFlinc|3P|XLOC_033946|TCONS_00137705:0.986858|221AA|196AA|$|$EnsASCoding|3P|XLOC_000485|TCONS_00003136:0.4139|122AA|78AA||RNACodeAS|HSS_0_4.2E-9$HSS_1_4.5E-5$|$EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA|   linc|3P|XLOC_104529|TCONS_00206387:0.585795|114AA|82AA|$|$EnsASCoding|3P|XLOC_082328|TCONS_00160013:0.608952|88AA|59AA||RNACodeAS|HSS_18226_2.7E-14$HSS_18230_7.0E-5$HSS_18231_3.8E-13$HSS_18232_1.4E-5$|$LongAUGORFEnsASCoding|3P|XLOC_097111|TCONS_00191837|Zfp422:0.683284|252AA|192AA||RNACodeAS|HSS_28462_1.1E-12$HSS_28463_1.0E-16
279 linc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA|$|$linc|3P|XLOC_067039|TCONS_00267116:3.53265|56AA|54AA|$|$linc|3P|XLOC_067039|TCONS_00267119:0.429515|42AA|31AA|$|$inc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA| LongAUGORFlinc|3P|XLOC_097853|TCONS_00194306|AB041803:0.416568|171AA|166AA|$|$LongAUGORFlinc|3P|XLOC_097853|TCONS_00194302|AB041803:0.682355|197AA|166AA|$|$LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA|

第2列和第3列的每个元素都被“$|$”分割。但是,在$和$之间可能有冗余部分。例如,在第2行的人列中,以下表达式重复两次:

EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA| 

重复两次。你知道吗

我有一个2列的查询列表:[GeneID,XLOC\u ID]:

GeneID  XLOC_ID
A   LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA|
B   linc|3P|XLOC_105908|TCONS_00210845:3.79119|120AA|90AA|
C   linc|3P|XLOC_082473|TCONS_00160364:0.170433|40AA|22AA|
D   LongAUGORFEnsASCoding|3P|XLOC_084529|TCONS_00166880:0.478235|183AA|171AA|
E   linc|3P|XLOC_043879|TCONS_00084901:2.01255|106AA|97AA|

查询列表的每个行元素都是唯一的。你知道吗

我想查看查询列表的第二列,查看该值是否与库的“Mouse”列中任何以“$|$”分隔的元素匹配。如果是,则将库的“Human”列拆分为“$|$”,然后输出每个查询id和$|$中的每个元素。你知道吗

例如,“GeneID”A的XLOC|u ID是:LongAUGORFlinc | 3P | XLOC|u 097853 | TCONS | u 00194307 | AB041803:0.181415 | 171AA | 166AA |

这是库的[row 3,Mouse column]的一部分。因此,我需要将第3行的Human列按$|$拆分,以便在单独的行中输出每个列,例如结果如下:

GeneID  XLOC_ID Human_ID
A   LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA|
A   LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267116:3.53265|56AA|54AA|
A   LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267119:0.429515|42AA|31AA|

并对查询列表的其余部分执行相同的操作,所有内容都应输出在同一个文件中。你知道吗

这是我的代码(我不认为这是最好的记忆方面,但它的工作):

library=pd.read_table("Library.txt")
mouse_lib=pd.Series(library['Mouse']).str.split("$|$")


dict1={}
human_lib=pd.Series(library['Human'].str.split("$|$"))
for index, value in human_lib.iteritems():
    k,v=index, human_lib[index]
    dict1[k]=v


out_match=open("Matching.xls", "w")

query=pd.read_table("Query.txt")
for i in range(0, len(query.index)):
    xloc=query.ix[i,"XLOC_ID"]
    for index, value in mouse_lib.iteritems():
        #print mouse_lib[index]
        if xloc in mouse_lib[index]:
            for value in dict1[index]:
                newline= query.ix[i,"GeneID-gtf"], xloc, str(value)
                out_match.write('\t'.join(newline)+'\n')

不幸的是,如果使用“$|$”作为分隔符,则代码不起作用。如果我用任何其他字符串(如“ZZZYYY”)替换所有输入文件中的所有“$|$”,那么脚本就可以工作了。我不明白为什么会这样,我试图搜索“$|$”是否是预定义的python代码,但没有找到任何类似的内容。此外,我不确定我上面的代码在内存和功能方面是否是最好的。如有任何建议,将不胜感激。你知道吗


Tags: 代码idindexlibhumanmousegeneidxloc
2条回答

不能按$|$拆分,因为它用作正则表达式-请参见^{}。您需要将其转义到\$\|\$。你知道吗

首先你可以^{}。你知道吗

然后可以使用^{}创建一列进行匹配。然后^{}Seriesmouse_libhuman_lib合并成^{}。最后您可以写out^{}

#if separator is not ',' use sep=";" for ';' or sep="\s+" for whitespace
library = pd.read_csv("Library.txt")
query = pd.read_csv("Query.txt")


mouse_lib = library['Mouse'].str.split(r"\$\|\$", expand=True).stack()
human_lib= library['Human'].str.split("\$\|\$", expand=True).stack()

df = pd.concat([human_lib, mouse_lib], axis=1, keys=['human','mouse']).reset_index(drop=True, level=1) 
print df
                                               human  \
0  LongAUGORFlinc|3P|XLOC_076196|TCONS_00295623:0...   
0  linc|3P|XLOC_037932|TCONS_00153577:0.957089|10...   
0  linc|3P|XLOC_048756|TCONS_00195334:1.35817|128...   
1  EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.39...   
1  LongAUGORFlinc|3P|XLOC_033946|TCONS_00137705:0...   
1  EnsASCoding|3P|XLOC_000485|TCONS_00003136:0.41...   
1  EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.39...   
2  linc|3P|XLOC_067039|TCONS_00267121:3.78124|173...   
2  linc|3P|XLOC_067039|TCONS_00267116:3.53265|56A...   
2  linc|3P|XLOC_067039|TCONS_00267119:0.429515|42...   
2  inc|3P|XLOC_067039|TCONS_00267121:3.78124|173A...   

                                               mouse  
0  linc|3P|XLOC_066319|TCONS_00127223:1.0925|85AA...  
0  LongAUGORFEnsASCoding|3P|XLOC_104581|TCONS_002...  
0  LongAUGORFEnsASCoding|3P|XLOC_113060|TCONS_002...  
1  linc|3P|XLOC_104529|TCONS_00206387:0.585795|11...  
1  EnsASCoding|3P|XLOC_082328|TCONS_00160013:0.60...  
1  LongAUGORFEnsASCoding|3P|XLOC_097111|TCONS_001...  
1                                                NaN  
2  LongAUGORFlinc|3P|XLOC_097853|TCONS_00194306|A...  
2  LongAUGORFlinc|3P|XLOC_097853|TCONS_00194302|A...  
2  LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|A...  
2                                                NaN 
out =  pd.merge(df, query , left_on=['mouse'], right_on=['XLOC_ID']) 
print out
                                               human  \
0  linc|3P|XLOC_067039|TCONS_00267119:0.429515|42...   

                                               mouse GeneID  \
0  LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|A...      A   

                                             XLOC_ID  
0  LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|A...  

out.to_xls("Matching.xls")

等等。。。让我们看看spliting命令:

mouse_lib=pd.Series(library['Mouse']).str.split("$|$")

创建熊猫系列,然后将拆分应用于系列。拆分NDFrame意味着什么?你知道吗

我想你需要把输入分成几个部分,然后把它做成一个系列,嗯?你知道吗

相关问题 更多 >