求助:如何通过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
相关产品推荐
相关产品推荐

