You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:42:31