繁体   English   中英

将 Pandas Dataframe 或 csv 文件转换为自定义嵌套 Z0ECD11C1D7A287401D148A23BBD7A2F8

[英]Convert Pandas Dataframe or csv file to Custom Nested JSON

我有一个 csv 文件,其 DF 结构如下:

我的 dataframe:

在此处输入图像描述

我想使用 python 将数据输入到以下 JSON 格式。 我查看了几个链接(但我在嵌套部分迷路了)。 我检查的链接:

如何将 pandas dataframe 转换为结构独特的嵌套 json

将 dataframe 转换为嵌套 json

"PHI": 2,
"firstname": "john",
"medicalHistory": {
  "allergies": "egg",
  
"event": {
    "inPatient":{
        "hospitalized": {
        "visit" : "7-20-20",
        "noofdays": "5",
         "test": {
            "modality": "xray"   
        } 
        "vitalSign": {
    "temperature": "32",
        "heartRate": "80"
  
  },
 "patientcondition": {
        "headache": "1",
        "cough": "0"
  }
        },
        "icu": {
            "visit" : "",
          "noofdays": "",
        },
    },
    "outpatient": {
        "visit":"5-20-20",
        "vitalSign": {
   "temperature": "32",
        "heartRate": "80"
  },
  "patientcondition": {
        "headache": "1",
        "cough": "1"
  },
  "test": {
            "modality": "blood"   
        }    
  }
    }

}

如果有人可以帮助我处理嵌套数组,那将非常有帮助。

您需要一个或多个辅助函数来解压缩表中的数据,如下所示。 编写主助手 function 以接受两个 arguments:1. df 和 2. schema。 该模式将用于将 df 解压缩为 df 中每一行的嵌套结构。 下面的架构是如何为您描述的逻辑子集实现此目的的示例。 虽然不完全是您在示例中指定的内容,但应该足以提示您自己完成任务的 rest。

from operator import itemgetter
groupby_idx = ['PHI', 'firstName']
groups = df.groupby(groupby_idx, as_index=False, drop=False)
schema = {
    "event": {
        "eventType": itemgetter('event'), 
        "visit": itemgetter('visit'),
        "noOfDays": itemgetter('noofdays'),
        "test": {
            "modality": itemgetter('test')
        },
        "vitalSign": {
            "temperature": itemgetter('temperature'),
            "heartRate": itemgetter('heartRate')
        },
        "patientCondition": {
            "headache": itemgetter('headache'),
            "cough": itemgetter('cough')
        }
    }
}

def unpack(obj, schema):
    tmp = {}
    for k, v in schema.items():
        if isinstance(v, (dict,)):
            tmp[k] = unpack(obj, v)
        if callable(v):
            tmp[k] = v(obj)
    return tmp

def apply_unpack(groups, schema):
    results = {}
    for gidx, df in groups:
        events = []
        for ridx, obj in df.iterrows():
            d = unpack(obj, schema)
            events.append(d)
        results[gidx] = events
    return results

unpacked = apply_unpack(groups, schema)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM