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

如何将Pandas DataFrame中的嵌套JSON/字典拆分为独立列

解决Pandas中嵌套JSON列的展开问题

问题分析

你的query_result列存储的是嵌套结构的JSON字符串,需要将其展开为四个独立列:server_windows、server_linux、workstation_windows、workstation_mac。之前尝试ast模块未成功,大概率是缺少了嵌套结构的后续展开步骤。

解决方案

通过解析JSON字符串为字典 + 展开嵌套字典为DataFrame两步即可完成需求,具体代码如下:

1. 导入依赖模块

import pandas as pd
import ast

2. 读取并预处理数据

先读取CSV文件,再将query_result列的字符串解析为Python字典(兼容异常格式):

# 读取数据
df = pd.read_csv('data.csv', index_col='created_at', parse_dates=True)

# 解析JSON字符串为字典,处理可能的格式异常
def parse_nested_json(s):
    try:
        return ast.literal_eval(s)
    except (ValueError, TypeError):
        # 解析失败时返回空字典,避免后续报错
        return {}

df['query_result'] = df['query_result'].apply(parse_nested_json)

3. 展开嵌套字典为目标列

使用pd.json_normalize自动展开嵌套结构,重命名列后合并到原DataFrame:

# 展开嵌套字典
result_df = pd.json_normalize(df['query_result'])

# 重命名列以匹配需求
result_df = result_df.rename(columns={
    'servers.windows': 'server_windows',
    'servers.linux': 'server_linux',
    'workstations.windows': 'workstation_windows',
    'workstations.mac': 'workstation_mac'
})

# 合并到原DataFrame并移除原query_result列
df = pd.concat([df.drop('query_result', axis=1), result_df], axis=1)

最终结果

处理后的DataFrame结构示例:

country  query_success  server_windows  server_linux  workstation_windows  workstation_mac
created_at                                                                                                
2022-08-18 08:38:38  Germany           True               0             0                     0                0

异常处理补充

如果展开后出现缺失值,说明对应行的query_result中没有目标嵌套键,可添加以下代码填充默认值:

result_df = result_df.fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:33:57