在cnapandas 資料框中,對于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 | |
|---|---|---|---|---|
| 0 | GENEID|ENSG12345 | 0.1 | 0.2 | 0.3 |
| 1 | 熱內亞 | 0.4 | 0.5 | 0.6 |
| 2 | 另一個基因|ENSG6789 | 0.7 | 0.8 | 0.9 |
| 3 | 日內瓦 | 1.0 | 1.1 | 1.2 |
期望的輸出
| Hugo_Symbol | TCGA_1 | TCGA_2 | TCGA_3 | |
|---|---|---|---|---|
| 0 | ENSG12345 | 0.1 | 0.2 | 0.3 |
| 1 | 熱內亞 | 0.4 | 0.5 | 0.6 |
| 2 | ENSG6789 | 0.7 | 0.8 | 0.9 |
| 3 | 日內瓦 | 1.0 | 1.1 | 1.2 |
uj5u.com熱心網友回復:
您需要使用Series.str.replace:
cna["Hugo_Symbol"] = cna["Hugo_Symbol"].str.replace(r'^[^|]*\|', '', regex=True)
詳情:
^- 字串的開始[^|]*- 零個或多個字符|\|- 一個|字符。
請參閱正則運算式演示。
熊貓測驗:
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:
會計。Pandas 1.2.0 發行說明:
在未來的版本中, regex for的默認值
Series.str.replace()將從True更改為False 。此外,當設定regex=True ( GH24804 ) 時,單字符正則運算式將不會被視為文字字串。
uj5u.com熱心網友回復:
您可以使用簡單的正則運算式 wth 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
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475193.html
