我如何使用正则表达式删除管道之前的子字符串在熊猫数据框架?



cnapandas数据框中,对于Hugo_symbol列的所有值,如果有一个管道(|)后面跟着&;ENSG*&;,则删除管道前面的所有值

我代码:

import re
cna["Hugo_Symbol"] = [re.sub(r"^|.*", "", str(x)) for x in cna["Hugo_Symbol"]]

当前cna数据帧

<表类>Hugo_SymbolTCGA_1TCGA_2TCGA_3tbody><<tr>0GENEID | ENSG123450.10.20.31日内瓦0.40.50.62ANOTHERGENEID | ENSG67890.70.80.93GENEB1.01.11.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演示

相关内容

  • 没有找到相关文章

最新更新