我有一个包含一个文本字符串的单列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('')
任何帮助将不胜感激!谢谢你。
1条答案
按热度按时间aydmsdu91#
你可以试试这个:
输出:
| 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|