需要 pymongo 数据帧输出为多行

Posted

技术标签:

【中文标题】需要 pymongo 数据帧输出为多行【英文标题】:Need pymongo data frame output as multiple rows 【发布时间】:2022-01-19 08:38:38 【问题描述】:

这是我在 MongoDB 数据源中的 JSON 输入。

 
    "_id" : ObjectId("61b84ae8e831076431a67f9e"), 
    "nameId" : "A123R3", 
    "__v" : NumberInt(0), 
    "createdAt" : ISODate("2021-12-14T07:42:31.764+0000"), 
    "data" : [
        
            "sources" : [], 
            "_id" : ObjectId("61b84ae7abea48f85c97e37e"), 
            "inputImage" : "URL1", 
            "outputImage" : "URL2", 
            "timeTracks" : 
                "main" : 
                    "total" : 2.993, 
                    "actualTotal" : 2.993
                
             ,
            "source" : "ui"
        , 
        
            "sources" : [], 
            "_id" : ObjectId("61b84ae8c7dc60f88356bf97"), 
            "inputImage" : "URL3", 
            "outputImage" : "URL4", 
            "timeTracks" : 
                "main" : 
                    "total" : 3.283, 
                    "actualTotal" : 3.28
                
             ,     
                  "source" : "ui"
        , 
        
    ], 
    "updatedAt" : ISODate("2021-12-14T07:42:32.082+0000")
我有上面的 json 作为我的输入和 我需要一个像下面这样的python输出数据框,在此先感谢

【问题讨论】:

能否将您的 json 记录转换为 python dict,否则我们无法转换 ObjectIdISODate @Corralien 不知道将我的 JSON 转换为 python 字典。忽略那个 Objectid。 【参考方案1】:

建议 - 在您的 mongo "$project" 查询中,添加 "_id": 0 并使用 "$dateToString" 将 ISO 日期转换为字符串格式。之后,您可以按照以下方式进行操作。

 data =  
    "nameId" : "A123R3", 
    "createdAt" :"2021-12-14",
    "data" : [
        
            "sources" : [], 
            "inputImage" : "URL1", 
            "outputImage" : "URL2", 
            "timeTracks" : 
                "main" : 
                    "total" : 2.993, 
                    "actualTotal" : 2.993
                
             ,
            "source" : "ui"
        , 
        
            "sources" : [], 
            "inputImage" : "URL3", 
            "outputImage" : "URL4", 
            "timeTracks" : 
                "main" : 
                    "total" : 3.283, 
                    "actualTotal" : 3.28
                
             ,     
                  "source" : "ui"
        , 
        
    ], 
    "updatedAt" : "2021-12-14"

import pandas as pd
df = pd.json_normalize(data, record_path=['data'], meta=['nameId','createdAt','updatedAt'], errors='ignore')

      sources inputImage outputImage source  timeTracks.main.total  timeTracks.main.actualTotal  nameId   createdAt   updatedAt
0      []       URL1        URL2     ui                  2.993                        2.993  A123R3  2021-12-14  2021-12-14
1      []       URL3        URL4     ui                  3.283                        3.280  A123R3  2021-12-14  2021-12-14

【讨论】:

以上是关于需要 pymongo 数据帧输出为多行的主要内容,如果未能解决你的问题,请参考以下文章

在 PyMongo 中使用 $not $in $regex

云数据库mongodb基本使运用以及pymong使用方法

python代码实现:视频转换终端字符,输出字符代码视频(python实现输出多行刷新)

如何从单个 JSON(IOT HUB)将流分析输出转换为多行

是否可以重命名 PyMongo 中 Mongo 查询输出中的字段?

从函数输出数据帧结果的适当方法是啥?