将Pandas数据帧转换为动态嵌套的JSON。
将Pandas数据帧转换为动态嵌套的JSON。
我想创建一个类似于以下内容的数据框:
employeeId firstName lastName emailAddress isDependent employeeIdTypeCode entityCode sourceCode roleCode 0 E123456 Andrew Hoover hoovera@xyz.com False 001 AE AHR EMPLR 0 102939485 Andrew Hoover hoovera@xyz.com False 002 AE AHR EMPLR 2 E123458 Celeste Riddick riddickc@xyz.com True 001 AE AHR EMPLR 2 354852739 Celeste Riddick riddickc@xyz.com True 002 AE AHR EMPLR 1 E123457 Curt Austin austinc1@xyz.com True 001 AE AHR EMPLR 1 675849302 Curt Austin austinc1@xyz.com True 002 AE AHR EMPLR 3 E123459 Hazel Tooley tooleyh@xyz.com False 001 AE AHR EMPLR 3 937463528 Hazel Tooley tooleyh@xyz.com False 002 AE AHR EMPLR
对于每一行,我想将其转换为嵌套的JSON格式。
因此,我希望我的JSON对于每个个体都是这样的,因为我希望迭代数据框并将其发送到API。
{
"individualInfo":
{
"individualIdentifier":[
{
"identityTypeCode":"001",
"identifierValue":"E123456",
"profileInfo":{
"firstName":"Andrew",
"lastName":"Hoover",
"emailAddress":"hoovera@xyz.com"
}
},
{
"identityTypeCode":"002",
"identifierValue":"102939485",
"profileInfo":{
"firstName":"Andrew",
"lastName":"Hoover",
"emailAddress":"hoovera@xyz.com"
}
}
],
"entityCode":"AE",
"sourceCode":"AHR",
"roleCode":"EMPLR"
"isDependent":False
}
}
重要的是,我希望我的JSON生成与数据框中的Id
列无关。因此,如果数据框中有另一个ID,那么我希望该ID具有另一个具有相同个人资料信息的字典对象。因此,每个个人资料可以具有任意数量的Id
。
我可以使用以下代码实现:
j = (result.groupby(['identifierValue','identityTypeCode'], as_index=False).apply(lambda x: x[['firstName','lastName','emailAddress']].to_dict('r')).reset_index().rename(columns={0:'ProfileInfo'}).to_json(orient='records'))
在pandas中是否有可能以这种动态方式实现?
非常感谢帮助!
我找到了一些其他关于嵌套的问题:
Convert Pandas Dataframe to nested JSON
这些问题都没有帮助我,因为我希望我的数据框的每个索引都转换为单独的JSON负载,因为每个个体都将发送到我用于将数据发布到数据库的API服务。
Pandas dataframe to a dynamic nested JSON问题的出现原因是需要将一个Pandas DataFrame转换为一个具有动态嵌套结构的JSON格式。在这种情况下,DataFrame包含了多个分组,每个分组又包含了多个子分组,需要将这种嵌套关系转换为适合JSON格式的结构。
为了解决这个问题,可以按照以下步骤进行操作:
1. 导入pandas库,创建一个DataFrame对象。在示例中,DataFrame包含了三列数据:entityCode、sourceCode和identityTypeCode。
2. 创建一个空列表results,用于存储最终的结果。
3. 使用groupby函数按照entityCode和sourceCode两列进行分组,得到一个分组后的子DataFrame。
4. 使用for循环遍历每个分组,获取entityCode和sourceCode的值。
5. 创建一个空字典d,用于存储每个分组的结果。
6. 在字典d中创建一个键值对,键为"individualInfo",值为一个包含entityCode和sourceCode的字典。
7. 创建一个空列表sub_result,用于存储每个子分组的结果。
8. 在子DataFrame中使用drop_duplicates函数去除重复的行,并使用iterrows函数遍历每行数据。
9. 将每行数据转换为字典形式,并添加到列表sub_result中。
10. 在字典d中创建一个键值对,键为"individualIdentifier",值为列表sub_result。
11. 将字典d添加到列表results中。
12. 最后,将列表results转换为JSON格式。
通过以上步骤,可以将DataFrame转换为具有动态嵌套结构的JSON格式。最终的结果是一个包含多个字典的列表,每个字典包含了"individualInfo"和"individualIdentifier"两个键值对,分别对应entityCode和sourceCode的值以及identityTypeCode的列表。
这样的数据结构可以更好地表示嵌套关系,便于后续的数据处理和分析。
Pandas dataframe转换为动态嵌套JSON
在处理数据时,有时候我们需要将Pandas dataframe转换为嵌套的JSON格式。下面的代码展示了一种解决方法。
代码中使用了Pandas库以及collections和json模块。首先,我们需要先导入这些模块并准备好我们的数据,将其存储在一个名为"result"的dataframe中。
接下来,我们使用defaultdict函数创建一个嵌套字典(dicted)。然后,我们遍历result的每一行,将每一行的数据提取出来,并以firstName、lastName和emailAddress作为标识符。
如果字典中已经存在以标识符为键的嵌套字典(individualInfo),则不做任何操作。否则,我们创建一个空的individualInfo字典,并将其添加到dicted中。
然后,我们将实体代码(entityCode)、来源代码(sourceCode)、角色代码(roleCode)和是否为从属(isDependent)的值添加到individualInfo字典中。
接着,我们检查individualInfo字典中是否已经存在individualIdentifier键。如果不存在,则创建一个空的individualIdentifier列表,并将其添加到individualInfo字典中。
最后,我们将身份类型代码(identityTypeCode)、标识符值(identifierValue)以及个人信息(firstName、lastName和emailAddress)添加到individualIdentifier列表中。
最后,我们遍历dicted字典,并使用json.dumps函数将其转换为JSON格式并打印出来。
通过上述代码,我们可以将Pandas dataframe转换为嵌套的动态JSON格式,以满足我们的需求。
整理自stackoverflow.com的回答:
https://stackoverflow.com/questions/63094747
Pandas DataFrame 转换为动态嵌套 JSON 的原因是数据不符合所需的格式。解决方法是使用 Pandas 的 to_dict 方法将 DataFrame 转换为字典,然后再根据需要的格式进行处理。
在上述内容中,提供了一种实现的方法。首先通过 set_index 方法将 DataFrame 的两列作为索引,然后使用 to_dict 方法将 DataFrame 转换为字典。这样得到的字典可以根据指定的索引值进行查找。
在处理 JSON 中的 profileInfo 时,可以使用上述字典并根据相应的索引值进行引用。这样就可以实现将 DataFrame 转换为动态嵌套 JSON 的需求。
原作者也提到了尝试过类似的方法,但由于数据不符合1维格式的要求,无法成功进行分组。
以上是解决问题的思路和方法。通过将 DataFrame 转换为字典,并根据需要进行索引和引用,可以实现将 DataFrame 转换为动态嵌套 JSON 的功能。