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

如何从含嵌套字典的字典创建DataFrame并将以'ga:'开头的键设为列?

解决你的两个Pandas数据处理需求

一、从嵌套字典创建DataFrame

先来说第一个需求,嵌套字典转DataFrame分两种常见场景,我给你举两个实用的例子:

场景1:外层字典键作为行索引,内层字典的键作为列

比如你有这样的嵌套字典:

nested_dict = {
    "row1": {"col1": 1, "col2": 2},
    "row2": {"col1": 3, "col2": 4}
}

直接用pd.DataFrame就能生成DataFrame,外层键会自动成为索引,转置后结构更符合常规:

import pandas as pd
df = pd.DataFrame(nested_dict).T
print(df)

或者用from_dict指定orient='index',效果是一样的:

df = pd.DataFrame.from_dict(nested_dict, orient='index')

场景2:内层字典是独立的行数据

如果嵌套字典是列表形式,每个内层字典对应一行数据:

nested_dict = [
    {"col1": 1, "col2": 2},
    {"col1": 3, "col2": 4}
]

直接传入DataFrame构造函数即可生成标准结构的表格:

df = pd.DataFrame(nested_dict)

二、处理你的特定数据集,提取ga:开头的键作为列

你的数据集里有nan值,还有字符串形式的字典,我们分步骤来处理:

步骤1:导入依赖并定义原始数据

import pandas as pd
import numpy as np
from ast import literal_eval  # 用这个安全解析字符串格式的字典,比eval更稳妥

raw_data = {
    0: np.nan,
    1: np.nan,
    2: "{'ga:productSku': 148223, 'ga:dimension16': '4511', 'ga:productName': 'Amargo Terma Serrano 1.35 L','ga:productCategoryHierarchy': '/Almacén/Bebidas/Aguas/Gaseosas/Jugos/A Base de Hierbas'}",
    3: "{'ga:productSku': 248146, 'ga:dimension16': '1001', 'ga:productName': 'Aperitivo Cynar 900 Ml', 'ga:productCategoryHierarchy': '/Almacén/Bebidas/Aguas/Gaseosas/Jugos/Aperitivos'}"
}

步骤2:解析字符串字典并过滤有效数据

先把原始数据转成Series,过滤掉空值后,将字符串解析为真实字典:

# 转成Series方便逐个处理数据
s = pd.Series(raw_data)
# 过滤掉nan值,再把字符串格式的字典转成Python字典
parsed_dicts = s.dropna().apply(literal_eval)

步骤3:提取ga:开头的键生成DataFrame

直接把解析后的字典传入DataFrame,Pandas会自动把字典的键作为列——刚好就是你需要的ga:开头的字段:

# 如果不需要保留原始索引(2、3),可以用tolist()
df = pd.DataFrame(parsed_dicts.tolist())
# 如果想保留原始索引,用下面的写法
# df = pd.DataFrame.from_dict(parsed_dicts.to_dict(), orient='index')
print(df)

保留空值行的进阶处理

如果想保留原始的0、1行(空值行),可以用try-except包裹解析逻辑,避免报错:

def parse_ga_dict(value):
    if pd.isna(value):
        return {}  # 空值返回空字典,保证后续能生成空行
    try:
        return literal_eval(value)
    except:
        return {}  # 解析失败也返回空字典

# 解析所有数据,包括nan值
all_parsed = s.apply(parse_ga_dict)
df = pd.DataFrame(all_parsed.tolist(), index=s.index)

最终效果

运行后你会得到这样的DataFrame:

ga:productSku ga:dimension16 ga:productName ga:productCategoryHierarchy
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 148223 4511 Amargo Terma Serrano 1.35 L /Almacén/Bebidas/Aguas/Gaseosas/Jugos/A Base de Hierbas
3 248146 1001 Aperitivo Cynar 900 Ml /Almacén/Bebidas/Aguas/Gaseosas/Jugos/Aperitivos

内容的提问来源于stack exchange,提问作者Jose Miguel Gonzalez Larrain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:17:34