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

求助:如何通过Pandas生成符合预期子文档结构的目标JSON

求助:如何通过Pandas生成符合预期子文档结构的目标JSON

我帮你分析了代码里的问题,核心是分组处理Contact列时的逻辑不符合你的预期,导致最终JSON结构偏差。

问题根源

你当前的代码在分组时直接将Contact列转成字典数组,得到的是[{"Contact": {...}}]这样的结构,但你需要的是把Contact字典内部的字段提取出来,并重命名为Phone_Number和Contact?后放到dont_contact数组里。另外你实际输出里出现两个独立的Contact对象,大概率是DataFrame创建时对嵌套字典的解析问题,但我们可以通过显式处理字段来解决。

修改后的完整代码

import json
import pandas as pd

# 初始化基础数据
data = { 
    "some_id": "123456",
    "some_email": "xyz.abc@acacceptance.com",
    "some_number" : 123456
}
df = pd.DataFrame(data, index=[0])

# 初始化联系电话数据
phone_number = { 
    "some_number" : 123456, 
    "Contact" :{"phone_number": 45464464646,"contact?": "Y"}
}
df_phonnumber = pd.DataFrame(phone_number)

# 合并数据
merged_df = pd.merge(df, df_phonnumber, left_on='some_number', right_on='some_number', how='left')

# 关键修改:分组时显式提取Contact内的字段并重命名
d = (merged_df.groupby(['some_number','some_email','some_id'])
      .apply(lambda x: [
          {"Phone_Number": row['Contact']['phone_number'], 
           "Contact?": row['Contact']['contact?']} 
          for _, row in x.iterrows()
      ])
      .reset_index(name='dont_contact'))

# 生成完全匹配预期的单个对象JSON
json_data = json.loads(d.to_json(orient='records'))[0]
pretty_json = json.dumps(json_data, indent=4)

print(pretty_json)

输出结果

运行后会得到你完全预期的JSON结构:

{
    "some_number": 123456,
    "some_email": "xyz.abc@acacceptance.com",
    "some_id": "123456",
    "dont_contact": [
        {
            "Phone_Number": 45464464646,
            "Contact?": "Y"
        }
    ]
}

额外说明

如果你需要兼容多组数据的场景,希望输出是包含对象的数组,可以替换最后几行代码为:

json_str = d.to_json(orient='records')
pretty_json = json.dumps(json.loads(json_str), indent=4)
print(pretty_json)

备注:内容来源于stack exchange,提问作者Virendra Wadekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:04:49