在cna
pandas数据框中,对于Hugo_symbol
列的所有值,如果有一个管道(|
)后面跟着&;ENSG*&;,则删除管道前面的所有值
我代码:
import re
cna["Hugo_Symbol"] = [re.sub(r"^|.*", "", str(x)) for x in cna["Hugo_Symbol"]]
当前cna
数据帧
<表类>Hugo_Symbol TCGA_1 TCGA_2 TCGA_3 tbody><<tr>0 GENEID | ENSG12345 0.1 0.2 0.3 1日内瓦 0.4 0.5 0.6 2ANOTHERGENEID | ENSG6789 0.7 0.8 0.9 3 GENEB 1.0 1.1 1.2 表类>
您需要使用Series.str.replace
:
cna["Hugo_Symbol"] = cna["Hugo_Symbol"].str.replace(r'^[^|]*|', '', regex=True)
细节:
^
-起始字符串[^|]*
-|
以外的零个或多个字符|
- a|
char.
查看regex演示
熊猫测试:
import pandas as pd
cna = pd.DataFrame({'Hugo_Symbol':['GENEID|ENSG12345', 'GENEA'], 'TCGA_1':[0.1, 0.4]})
cna["Hugo_Symbol"].str.replace(r'^[^|]*|', '', regex=True)
0 ENSG12345
1 GENEA
Name: Hugo_Symbol, dtype: object
regex=True
:
Acc。到Pandas 1.2.0版本说明:
Series.str.replace()
的regex的默认值将在将来的版本中从True变为False。此外,当设置regex=True(GH24804)时,单字符正则表达式不会被视为字面值字符串。
您可以使用str.replace
:
cna['Hugo_Symbol'] = cna['Hugo_Symbol'].str.replace(r'^(.*|)', '', regex=True)
输出:
Hugo_Symbol TCGA_1 TCGA_2 TCGA_3
0 ENSG12345 0.1 0.2 0.3
1 GENEA 0.4 0.5 0.6
2 ENSG6789 0.7 0.8 0.9
3 GENEB 1.0 1.1 1.2
regex演示