如何优雅提取DataFrame指定列中~后的子串并保留分类标识
解决方案(基于Pandas矢量化操作)
假设你的数据已经加载为Pandas DataFrame,以下是无需循环的优雅处理方式:
1. 构造示例数据
先将你给出的数据集转为DataFrame:
import pandas as pd data = { 'Category': ['GOTERM_MF_DIRECT', 'GOTERM_MF_DIRECT', 'GOTERM_CC_DIRECT', 'GOTERM_CC_DIRECT'], 'Term': ['GO:0005102~receptor binding', 'GO:0008139~nuclear localization sequence binding', 'GO:0016021~integral component of membrane', 'GO:0071564~npBAF complex'], 'Count': [3, 2, 9, 3] } df = pd.DataFrame(data)
2. 处理Category列(保留MF/CC标识)
用正则表达式精准提取Category列中的MF或CC标识:
df['Category'] = df['Category'].str.extract(r'_([MC]F)_', expand=False)
正则_([MC]F)_会匹配并捕获MF或CC部分,直接替换原列内容。
3. 处理Term列(提取~后的字符串)
通过字符串分割直接获取~之后的内容:
df['Term'] = df['Term'].str.split('~').str[1]
若需要更严谨的匹配,也可以用正则提取:
df['Term'] = df['Term'].str.extract(r'~(.*)', expand=False)
最终结果
处理后的DataFrame如下:
| Category | Term | Count |
|---|---|---|
| MF | receptor binding | 3 |
| MF | nuclear localization sequence binding | 2 |
| CC | integral component of membrane | 9 |
| CC | npBAF complex | 3 |
内容的提问来源于stack exchange,提问作者Chemokine1
相关产品推荐
相关产品推荐

