如何在R/Python中拆分多格式列并提取指定内容生成新列
在R和Python中拆分数据框的键值对列并筛选指定列
R 实现
用tidyverse工具包可以快速完成需求,核心是拆分字符串、整理键值对再转成宽格式:
library(tidyverse) # 处理feature列并合并到原数据 df_processed <- df1 %>% # 按分号+空格拆分feature为多行,每个键值对占一行 separate_rows(feature, sep = "; ") %>% # 拆分键和值:用空格分割,允许值里包含空格(extra="merge") separate(feature, into = c("key", "value"), sep = " ", extra = "merge") %>% # 把键转为列名,对应值填充到列中 pivot_wider(names_from = key, values_from = value) %>% # 选择你需要的目标列 select(variant, chr, position, source, type, gene_id, gene_type, gene_name)
如果键和值之间的空格不止一个,可以把sep = " "改成sep = "\\s+"来匹配任意多的空白字符。
Python 实现
用pandas处理的思路是先把feature列的字符串解析成字典,再转成DataFrame和原数据合并:
import pandas as pd # 定义解析函数:把单个feature字符串转成键值对字典 def parse_feature(s): # 按分号拆分后去掉首尾空白,再拆分每个键值对(只按第一个空格分割,避免值里的空格被拆分) pair_list = [item.strip() for item in s.split(";") if item.strip()] return dict([pair.split(" ", 1) for pair in pair_list]) # 把feature列解析成DataFrame feature_df = df1["feature"].apply(lambda x: pd.Series(parse_feature(x))) # 合并原数据和解析后的feature列,然后筛选目标列 df_processed = pd.concat([df1.drop("feature", axis=1), feature_df], axis=1)[ ["variant", "chr", "position", "source", "type", "gene_id", "gene_type", "gene_name"] ]
这个方法能兼容值里包含空格的情况,比如gene_name是带空格的名称也能正确提取,缺失的键会自动填充NaN。
内容的提问来源于stack exchange,提问作者Jim_13
相关产品推荐
相关产品推荐

