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

使用Pandas处理类JSON列:拆分多行并提取指定字段

处理非标准类JSON列的拆分与字段提取

核心思路

先把每个单元格里的多个类JSON结构拆分出来,展开成多行(保留原标识符),再精准提取目标字段。下面用代码一步步实现:


步骤1:导入依赖并构造示例数据

import pandas as pd
import re

# 模拟你的数据结构
data = {
    'id': [1, 2, 3],
    'json_col': [
        '"{immediateJob : ""DIA"",Trimester :""Q"",Year :""}"',
        '"{immediateJob : ""Responsable conformité"",Trimester :""Q3"",Year :""2022""}{immediateJob : ""Responsable projet"",Trimester :""Q3"",Year :""2022""}"',
        pd.NA
    ]
}
df = pd.DataFrame(data)

步骤2:清理原始数据并提取结构

# 处理空值,同时去掉原始字符串外层多余的双引号
df['json_clean'] = df['json_col'].fillna('').str.strip('"')

# 定义正则表达式,匹配每个独立的{...}结构,并提取三个字段的值
# 正则会自动忽略字段间的空格,适配你的格式
pattern = r'\{immediateJob\s*:\s*""(.*?)""\s*,\s*Trimester\s*:\s*""(.*?)""\s*,\s*Year\s*:\s*""(.*?)""\s*\}'

# 提取每个单元格里的所有匹配结果,得到列表形式的元组(每个元组对应一个结构的三个字段)
df['matches'] = df['json_clean'].apply(lambda x: re.findall(pattern, x))

步骤3:拆分多行并生成最终结果

# 将列表拆分为多行,保留原始标识符id
df_exploded = df.explode('matches').drop(columns=['json_col', 'json_clean'])

# 把元组格式的匹配结果拆分成单独的列
df_exploded[['immediateJob', 'Trimester', 'Year']] = pd.DataFrame(
    df_exploded['matches'].tolist(), 
    index=df_exploded.index
)

# 清理临时列,得到最终数据
df_final = df_exploded.drop(columns=['matches'])

最终效果

运行后df_final的结果如下:

idimmediateJobTrimesterYear
1DIAQ
2Responsable conformitéQ32022
2Responsable projetQ32022
3

适配扩展

如果你的字段顺序不固定(比如有的结构里Year在最前面),可以用下面的正则来适配任意顺序:

pattern = r'\{.*?immediateJob\s*:\s*""(.*?)""|.*?Trimester\s*:\s*""(.*?)""|.*?Year\s*:\s*""(.*?)""'
# 注意:这种情况需要调整提取逻辑,确保字段对应正确,比如用re.finditer逐个匹配字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:37:06