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

如何将DataFrame列中含=的非JSON嵌套数组拆分为多列?

解决非标准键值格式的DataFrame列拆分问题

这个场景确实挺棘手——这种用=而非:的非标准"类JSON"格式,json_normalize自然没法直接识别。不过我们可以通过自定义解析先把格式转换成标准JSON结构,再完成拆分,具体步骤如下:

核心思路

  1. 将每个非标准对象(比如{lockstatus=0, openstatus=0})转换成标准JSON格式({"lockstatus":0, "openstatus":0})
  2. 把整列的非标准数组转成Python字典列表
  3. 用explode将每个字典拆成单独行,再用json_normalize展开为多列

完整代码示例

假设你的DataFrame里有一列叫status_array,存储着你描述的非标准数组数据,我们可以这么处理:

import pandas as pd
import re
import json

# 模拟你的原始DataFrame
df = pd.DataFrame({
    'record_id': [1, 2],
    'status_array': [
        '[ {lockstatus=0, openstatus=0, enablestatus=0}, {lockstatus=1, openstatus=1, enablestatus=1} ]',
        '[ {lockstatus=0, openstatus=0, enablestatus=0} ]'
    ]
})

# 自定义解析函数:把非标准格式转成标准字典列表
def parse_non_standard_json(s):
    # 用正则把 key=value 替换为 "key":value
    normalized_str = re.sub(r'(\w+)=', r'"\1":', s)
    # 解析成Python原生的字典列表
    return json.loads(normalized_str)

# 1. 将原始列转换为标准字典列表
df['parsed_status'] = df['status_array'].apply(parse_non_standard_json)

# 2. 展开每个字典为单独行
df_exploded = df.explode('parsed_status', ignore_index=True)

# 3. 把字典拆分为单独列,并保留原始ID列
final_df = pd.json_normalize(df_exploded['parsed_status']).join(df_exploded[['record_id']])

# 查看结果
print(final_df)

关键细节说明

  • 正则表达式re.sub(r'(\w+)=', r'"\1":', s):匹配所有单词格式的键,给它们加上双引号,并把=替换为JSON标准的:,完美适配你给出的示例格式
  • 如果你的原始列不是字符串,而是已经加载为列表(每个元素是类似自定义对象的结构),可以调整解析函数,遍历列表中的每个对象,把每个对象的键值对转成标准字典
  • explode函数负责把列表中的每个元素拆成单独行,确保每个状态对象对应一条独立记录

内容的提问来源于stack exchange,提问作者Ilsu kazkayası

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:42