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

Pandas嵌套DataFrame扁平化处理:适配institutes为None场景

嵌套字典DataFrame扁平展开(适配client.institutes为None场景)

可复现输入数据

import pandas as pd

data = {
    'contact': [{'email': 'a@test.com', 'phone': '12345'},
                {'email': 'b@test.com', 'phone': '67890'}],
    'profile': [{'name': 'Alice', 'age': 30},
                {'name': 'Bob', 'age': 28}],
    'client': [{'id': 'C001', 'institutes': [{'inst_id': 'I001', 'name': 'Inst A'}, {'inst_id': 'I002', 'name': 'Inst B'}]},
               {'id': 'C002', 'institutes': None}]
}

df = pd.DataFrame(data)

预期扁平输出

emailphonenameageclient_idinst_idinst_name
a@test.com12345Alice30C001I001Inst A
a@test.com12345Alice30C001I002Inst B
b@test.com67890Bob28C002NaNNaN

解决方案代码

import pandas as pd

# 1. 展开contact和profile的嵌套字典为独立列
df_contact = df['contact'].apply(pd.Series)
df_profile = df['profile'].apply(pd.Series)
df_combined = pd.concat([df_contact, df_profile, df['client']], axis=1)

# 2. 处理client.institutes为None的情况:替换为空列表,避免explode时丢失行
df_combined['client'] = df_combined['client'].apply(
    lambda x: {**x, 'institutes': x['institutes'] if x['institutes'] is not None else []}
)

# 3. 提取client.id并拆分institutes字段,执行explode展开列表
df_combined['client_id'] = df_combined['client'].map(lambda x: x['id'])
df_combined['institutes'] = df_combined['client'].map(lambda x: x['institutes'])
df_exploded = df_combined.explode('institutes', ignore_index=True)

# 4. 展开institutes的嵌套字典为独立列,并重命名区分
df_inst = df_exploded['institutes'].apply(pd.Series).rename(columns={'name': 'inst_name'})

# 5. 合并所有列,清理冗余原列
final_df = pd.concat(
    [df_exploded.drop(['contact', 'profile', 'client', 'institutes'], axis=1), df_inst],
    axis=1
)

print(final_df)

关键说明

  • 核心修复点:将client.institutes为None的场景替换为空列表[],这样explode操作不会直接丢弃该行,而是保留后让对应的机构字段显示为NaN,适配业务需求。
  • 分步展开:先处理顶层的contact/profile,再单独处理client的嵌套结构,避免多层嵌套展开时的字段冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:16