pandas 输出命名列,Regex提取函数输出为空

u7up0aaq  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个包含一个文本字符串的单列fullIden的表。我想使用正则表达式和extractall从这个字符串中提取值,并将它们输出到各个列中。但是,尽管表输出的是正确的列,但所有行当前都为空。
| fullIden|
| - -----|
| ENSAPLP0000008325.2 pep primary_assembly:CAU_duck1.0:1:4776:289936:-1 gene:ENSAPLG0000008650.2 transcript:ENSAPLT00000009001.2 gene_biotype:protein_coding transcript_biotype:protein_coding gene_symbol:SHANK3 description:SH3 and multiple ankyrin repeat domains 3 [Source:HGNC Symbol; Accc:HGNC:14294]|
下面是我使用的正则表达式:

p = re.compile(r'(?P<PepID>[^\s]+)\spep'
           + r'primary_assembly:(?P<genome_version>[^:]+):'
           + r'(?P<chromosome>[^:]+):'
           + r'(?P<start>[^:]+):'
           + r'(?P<end>[^:]+):'
           + r'(?P<strand>[^:]+):'
           + r'gene:(?P<gene>[^\s]+)\s+'
           + r'transcript:(?P<transcript>[^\s]+)\s*'
           + r'gene_biotype:(?P<gene_biotype>[^\s]+)\s*'
           + r'transcript_biotype:(?P<transcript_biotype>[^\s]+)\s*'
           + r'gene_symbol:(?P<gene_symbol>[^\s]+)\s*'
           + r'description:(?P<description>[^[]+)\s'
           + r'\[Source:(?P<source>[^;]+);*'
           + r'Acc:(?P<accession>[^]]+)\]*')

下面是我用来提取值并将其输出到各个列的代码:

df = pd.concat([
    df,
    (
        df.fullIden.str.extractall(p)
          .reset_index('match', drop=True)
    )
], axis=1).fillna('')

任何帮助将不胜感激!谢谢你。

aydmsdu9

aydmsdu91#

你可以试试这个:

p = ( # to be adjusted, if needed
    r'(?P<PepID>[^\s]+)\s*pep:?' 
     '\s*primary_assembly:(?P<genome_version>[^:]+):?'
     '\s*(?P<chromosome>[^:]+):?'
     '\s*(?P<start>[^:]+):?'
     '\s*(?P<end>[^:]+):?'
     '\s*(?P<strand>[^:]+):?'
     '\s*gene:(?P<gene>[^\s]+)\s*:?'
     '\s*transcript:(?P<transcript>[^\s]+):?'
     '\s*gene_biotype:(?P<gene_biotype>[^\s]+):?'
     '\s*transcript_biotype:(?P<transcript_biotype>[^\s]+):?'
     '\s*gene_symbol:(?P<gene_symbol>[^\s]+):?'
     '\s*description:(?P<description>[^[]+)'
     '\s*\[Source:(?P<source>[^;]+);*'
     '\s*Acc:(?P<accession>[^]]+)\]*'
)
            
out = df.join(df["fullIden"].str.extract(p))

#if multiple matches per row, df.join(df["fullIden"].str.extractall(p).droplevel(0))

输出:
| fullIden| PepID|基因组版本|染色体|启动|结束|股线|基因|抄本|基因生物型|转录生物型|基因符号|描述|来源|加入|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| ENSAPLP0000008325.2 pep primary_assembly:CAU_duck1.0:1:4776:289936:-1 gene:ENSAPLG0000008650.2 transcript:ENSAPLT00000009001.2 gene_biotype:protein_coding transcript_biotype:protein_coding gene_symbol:SHANK3 description:SH3 and multiple ankyrin repeat domains 3 [Source:HGNC Symbol; Accc:HGNC:14294]| ENSAPLP00000008325.2| CAU_duck1.0| 1|四七七六|289936|-1| ENSAPLG00000008650.2| ENSAPLT00000009001.2|蛋白质编码|蛋白质编码|SHANK3| SH3和多锚蛋白重复结构域3| HGNC符号|HGNC:14294|

相关问题