这里是字典中具有无限键的数据集。行中的“详细信息”列可能具有不同的信息产品,具体取决于客户
ID Name Detail
1 Sara [{"Personal":{"ID":"001","Name":"Sara","Type":"01","TypeName":"Book"},"Order":[{"ID":"0001","Date":"20200222","ProductID":"C0123","ProductName":"ABC", "Price":"4"}]},{"Personal":{"ID":"001","Name":"Sara","Type":"02","TypeName":"Food"},"Order":[{"ID":"0004","Date":"20200222","ProductID":"D0123","ProductName":"Small beef", "Price":"15"}]},{"Personal":{"ID":"001","Name":"Sara","Type":"02","TypeName":"Food"},"Order":[{"ID":"0005","Date":"20200222","ProductID":"D0200","ProductName":"Shrimp", "Price":"28"}]}]
2 Frank [{"Personal":{"ID":"002","Name":"Frank","Type":"02","TypeName":"Food"},"Order":[{"ID":"0008","Date":"20200228","ProductID":"D0288","ProductName":"Salmon", "Price":"24"}]}]
我的预期产出是
ID Name Personal_ID Personal_Name Personal_Type Personal_TypeName Personal_Order_ID Personal_Order_Date Personal_Order_ProductID Personal_Order_ProductName Personal_Order_Price
1 Sara 001 Sara 01 Book 0001 20200222 C0123 ABC 4
2 Sara 001 Sara 02 Food 0004 20200222 D0123 Small beef 15
3 Sara 001 Sara 02 Food 0005 20200222 D0200 Shrimp 28
4 Frank 002 Frank 02 Food 0008 20200228 D0288 Salmon 24
因此,基本上,在细节列中有一个嵌套的JSON,您需要将其分解为df,然后与原始JSON合并
如果您仔细阅读我的评论,我建议使用
detailDf
作为您的最终df,因为合并确实是不必要的,而且这些信息已经在详细的JSON中了首先,您需要创建一个函数来处理每行Detail列中的dict列表。简单地说,pandas可以将dict列表作为数据帧处理。所以我在这里所做的就是处理每一行Personal和Detail列中的dict列表,以获得映射的数据帧,这些数据帧可以为每个条目合并。应用此功能时:
创建将包含编译数据的空数据帧
现在使用我们在上面创建的函数来处理数据帧中每一行的数据。在这里使用一个简单的for循环来显示流程。”也可以调用“应用”函数以提高效率,但只需稍微修改concat过程。由于手头有一个空的数据框,我们将在其中收集每行的数据,for循环非常简单,如下2行:
最后重置索引:
您可以根据最终数据框中的要求重命名列。例如:
根据您的要求,使用以下命令(或跳过)列:
为数据帧的索引指定一个名称:
这应该会有所帮助
可以使用^{} 分别获取
Details
中列表的所有元素,然后使用Shubham Sharma's answer输出:
相关问题 更多 >
编程相关推荐