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

GitLab环境下嵌套DataFrame扁平化失败问题求助

问题解决:GitLab环境下嵌套JSON数据扁平化异常

问题分析

你遇到的核心问题是:本地环境中df.details.apply(pd.Series)能正常将嵌套字典拆分为独立字段,但GitLab环境中却生成多个同名details列,存储的是键值对而非预期字段。大概率是两个原因导致:

  • GitLab环境拉取的data中,details列的元素并非原生字典,而是字符串形式的字典(比如"{'author_name':'Billy', ...}");
  • 本地与GitLab环境的pandas版本差异,导致apply(pd.Series)的解析行为不一致。

解决方案

推荐使用pandas原生的pd.json_normalize()方法,它专门处理嵌套JSON结构,兼容性更强,无需手动拼接多级列名:

方案1:直接用json_normalize处理原始数据

如果拉取的原始data是列表形式的嵌套字典(比如你的示例数据组成的列表),直接用json_normalize生成扁平化DataFrame:

import pandas as pd

# 假设data是从GitLab拉取的嵌套字典列表
df = pd.json_normalize(data)
# 此时df直接包含id、entity_type、author_name、author_id、created_at列

方案2:修复现有代码(针对details列已存在的情况)

如果已经生成了包含details列的DataFrame,先确保details列是字典类型,再拆分:

import pandas as pd
import ast

# 拉取数据生成df
df = pd.DataFrame(data)

# 第一步:确保details列是字典类型(如果是字符串则转换)
def parse_dict(s):
    if isinstance(s, str):
        try:
            return ast.literal_eval(s)
        except:
            return {}
    return s

df['details'] = df['details'].apply(parse_dict)

# 第二步:拆分details列并合并到原df
sub_df = df['details'].apply(pd.Series)
df = pd.concat([df.drop('details', axis=1), sub_df], axis=1)

关键说明

  • pd.json_normalize()会自动识别嵌套字典的键,直接展开为顶层列,避免手动拼接多级索引的复杂操作;
  • 增加字符串转字典的步骤,是为了兼容GitLab环境中可能存在的序列化问题(比如接口返回的JSON被转为字符串存储);
  • 避免使用多级列名拼接的逻辑,减少环境差异导致的列名异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:45:38