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

如何在PySpark中从现有列提取键值对生成新列

拆分键值对格式列到多列的解决方法

针对你这种用;分隔组、=分隔键值的字符串列,下面提供几种常用工具的处理方案:

1. SQL 方案

1.1 PostgreSQL(支持灵活拆分与转置)

如果使用PostgreSQL,先把每行的PATH拆成键值对行,再通过聚合转置为列:

-- 第一步:拆分PATH为键值对行
WITH temp AS (
  SELECT 
    -- 替换成你的表主键列,用来标识原始行
    id,
    split_part(kv_pair, '=', 1) AS key_name,
    split_part(kv_pair, '=', 2) AS key_value
  FROM your_table,
  unnest(string_to_array(PATH, ';')) AS kv_pair
)
-- 第二步:转置为多列
SELECT 
  id,
  MAX(CASE WHEN key_name = 'country' THEN key_value END) AS country,
  MAX(CASE WHEN key_name = 'subject' THEN key_value END) AS subject,
  MAX(CASE WHEN key_name = 'Frequency' THEN key_value END) AS Frequency
FROM temp
GROUP BY id;

1.2 MySQL(两种提取方式)

方式一:依赖键的固定顺序

如果PATH里的键顺序永远是country;subject;Frequency,直接用字符串截取:

SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(PATH, ';', 1), '=', -1) AS country,
  SUBSTRING_INDEX(SUBSTRING_INDEX(PATH, ';', 2), '=', -1) AS subject,
  SUBSTRING_INDEX(SUBSTRING_INDEX(PATH, ';', 3), '=', -1) AS Frequency
FROM your_table;

方式二:不依赖键的顺序

如果键的顺序可能变化,用匹配键名的方式提取:

SELECT
  SUBSTRING_INDEX(IF(PATH LIKE '%country=%', SUBSTRING_INDEX(PATH, 'country=', -1), ''), ';', 1) AS country,
  SUBSTRING_INDEX(IF(PATH LIKE '%subject=%', SUBSTRING_INDEX(PATH, 'subject=', -1), ''), ';', 1) AS subject,
  SUBSTRING_INDEX(IF(PATH LIKE '%Frequency=%', SUBSTRING_INDEX(PATH, 'Frequency=', -1), ''), ';', 1) AS Frequency
FROM your_table;

2. Python Pandas 方案

Pandas的处理更灵活,尤其适合键顺序不固定或可能新增键的场景:

方式一:快速拆分(适用于固定键顺序)

import pandas as pd

# 假设你的数据已经读取到df中
df[['country', 'subject', 'Frequency']] = df['PATH'].str.split(';', expand=True).apply(lambda col: col.str.split('=').str[-1])

方式二:通用解析(自动适配所有键)

如果PATH里的键可能新增或顺序变化,用字典解析的方式自动生成列:

import pandas as pd

def parse_path(path_str):
    kv_dict = {}
    for kv in path_str.split(';'):
        key, value = kv.split('=')
        kv_dict[key] = value
    return pd.Series(kv_dict)

# 把解析后的键值对合并到原DataFrame
df = df.join(df['PATH'].apply(parse_path))

这种方法会自动识别所有出现过的键,生成对应的列,缺失键的行自动填充NaN。

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:47:16