Pandas如何提取列名中.s__后的内容重命名DataFrame列
pandas提取列名指定后缀重命名实现
问题场景
现有如下结构的pandas DataFrame,列名是按分类层级拼接的微生物分类字符串:
import pandas as pd data = pd.DataFrame({ "k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Aeromonadales.f__Aeromonadaceae.g__Aeromonas.s__Aeromonas_dhakensis": [123, 1234, 543, 2133], "k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Lachnospiraceae.g__Faecalicatena.s__Faecalicatena_orotica": [543, 324, 234, 652] })
单条列名格式示例:
k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Aeromonadales.f__Aeromonadaceae.g__Aeromonas.s__Aeromonas_dhakensis
需求为提取每个列名中.s__之后的字符串作为新列名,完成列重命名操作。
实现方法
直接对列名做字符串分割即可,一行代码就能完成重命名:
# 方法1:列表推导式写法,执行效率更高 data.columns = [col.split(".s__")[-1] for col in data.columns]
如果偏好pandas原生的字符串向量化操作,也可以使用下面的写法,最终效果完全一致:
# 方法2:pandas str向量化写法 data.columns = data.columns.str.split(".s__").str[-1]
效果验证
执行重命名后,输出data.columns可以看到新列名如下:
Index(['Aeromonas_dhakensis', 'Faecalicatena_orotica'], dtype='object')
注:这类微生物分类名的格式固定,
.s__标记仅会在列名末尾对应物种层级的位置出现一次,取分割结果的最后一段不会出现匹配错误的问题。
内容的提问来源于stack exchange,提问作者geomicrobio
相关产品推荐
相关产品推荐

