我正在嘗試撰寫一個函式,該函式將從 Pandas 資料框中的列的每個元素中洗掉前綴。我做了一些嘗試,但似乎都沒有奏效:
prefixes = ['mm10---', 'GRCh38-']
def clean_genes(column):
for gene in CTRL_data[f'{column}']:
for prefix in prefixes:
if row[f"{column}"].str.startswith(f"{prefix}"):
gene = str.replace(f"{prefix}", '', gene)
return column
def clean_genes(column):
for gene in CTRL_data[f"{column}"]:
gene = gene[7:]
return column
clean_genes(gene)
有人能指出這些嘗試哪里出錯了,或者我如何更好地撰寫這個函式?兩種情況下的錯誤是:
NameError Traceback (most recent call last)
/var/folders/pg/d3z5dn_x0f51tlwtj7391tjh0000gn/T/ipykernel_10029/2341573264.py in <module>
16 return column
17
---> 18 clean_genes(gene)
NameError: name 'gene' is not defined
編輯:我還查看了本網站和其他網站上的其他一些問題,包括我認為有幫助的這個問題(從 Python 中的字串中洗掉特定字符)。
uj5u.com熱心網友回復:
如果您的問題實際上是“如何從 Pandas 資料幀系列中洗掉一些前綴”,那么我可能會說
- 創建一個正則運算式來匹配這些前綴
- 使用
.str.replace這些系列
這也可能比手動回圈快得多。
import re
prefixes = ['mm10---', 'GRCh38-']
# Build a regexp that matches either of the given prefixes, anchored
# to the start of the string.
prefix_re = re.compile("^(" "|".join(re.escape(prefix) for prefix in prefixes) ")")
df["my_series"] = df["my_series"].str.replace(prefix_re, "")
uj5u.com熱心網友回復:
您可以通過構建與您的任一前綴匹配的正則運算式來洗掉前綴,然后使用正則運算式將它們替換為空字串,如下所示:
re = r'^(mm10\-\-\-|GRCh38\-)'
df["my_series"] = df["my_series"].str.replace(re, "")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403790.html
標籤:
