6225 10

[问答] 求大神指点怎么把列表字典转化为csv [推广有奖]

  • 0关注
  • 4粉丝

已卖:23份资源

教授

12%

还不是VIP/贵宾

-

威望
0
论坛币
6762 个
通用积分
19.5160
学术水平
18 点
热心指数
24 点
信用等级
15 点
经验
383 点
帖子
1182
精华
0
在线时间
997 小时
注册时间
2013-1-20
最后登录
2024-8-2

楼主
小宝爱波1314 发表于 2017-11-13 10:54:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教大神,我有一个列表字典结构的json数据,怎么转化为csv,基本原理是先把结构平铺开,然后用pandas转化为dataframe,再转为csv。由于如坑尚浅,不知道如何用python来平铺和转化,请大神们指教。数据结构如下:

[
  {
    "status": "unchanged",
    "dataset": {
      "id": "59f1f3b7d543647f13dae2e4",
      "name": "AE1QG1",
      "label": "1 ADVERSE EVENTS"
    },
    "details": null
  },
  {
    "status": "unchanged",
    "dataset": {
      "id": "59f1fb4fd543647f13daec14",
      "name": "AE1QG1_AGG",
      "label": "1.1 ADVERSE EVENTS aggregated"
    },
    "details": null
  },
  {
    "status": "unchanged",
    "dataset": {
      "id": "59f1fd55d543647f12a5da43",
      "name": "AE1QG1_SP",
      "label": "1.2 ADVERSE EVENTS AEYN !=N"
    },
    "details": null
  }]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:aggregated Dataframe Aggregate Details dataset

沙发
fengxingliulizi 发表于 2017-11-13 17:05:54
  1. string = '''[
  2.   {
  3.     "status": "unchanged",
  4.     "dataset": {
  5.       "id": "59f1f3b7d543647f13dae2e4",
  6.       "name": "AE1QG1",
  7.       "label": "1 ADVERSE EVENTS"
  8.     },
  9.     "details": null
  10.   },
  11.   {
  12.     "status": "unchanged",
  13.     "dataset": {
  14.       "id": "59f1fb4fd543647f13daec14",
  15.       "name": "AE1QG1_AGG",
  16.       "label": "1.1 ADVERSE EVENTS aggregated"
  17.     },
  18.     "details": null
  19.   },
  20.   {
  21.     "status": "unchanged",
  22.     "dataset": {
  23.       "id": "59f1fd55d543647f12a5da43",
  24.       "name": "AE1QG1_SP",
  25.       "label": "1.2 ADVERSE EVENTS AEYN !=N"
  26.     },
  27.     "details": null
  28.   }]'''

  29. import pandas as pd
  30. string = string.replace('null', '"null"')
  31. data = eval(string)
  32. df = pd.DataFrame(data)

  33. csvpath = r'd:\result.csv'
  34. df.to_csv(csvpath)
复制代码


已有 3 人评分经验 论坛币 学术水平 热心指数 收起 理由
刘彦楼 + 100 + 5 + 5 精彩帖子
我的素质低 + 100 + 10 精彩帖子
残阳_等待 + 100 + 5 + 1 精彩帖子

总评分: 经验 + 300  论坛币 + 15  学术水平 + 5  热心指数 + 6   查看全部评分

藤椅
hubifeng? 学生认证  发表于 2017-11-13 21:43:01
  1. >>> import pandas as pd
  2. >>> import numpy as np
  3. >>> dd=[
  4. ...   {
  5. ...     "status": "unchanged",
  6. ...     "dataset": {
  7. ...       "id": "59f1f3b7d543647f13dae2e4",
  8. ...       "name": "AE1QG1",
  9. ...       "label": "1 ADVERSE EVENTS"
  10. ...     },
  11. ...     "details": None
  12. ...   },
  13. ...   {
  14. ...     "status": "unchanged",
  15. ...     "dataset": {
  16. ...       "id": "59f1fb4fd543647f13daec14",
  17. ...       "name": "AE1QG1_AGG",
  18. ...       "label": "1.1 ADVERSE EVENTS aggregated"
  19. ...     },
  20. ...     "details": None
  21. ...   },
  22. ...   {
  23. ...     "status": "unchanged",
  24. ...     "dataset": {
  25. ...       "id": "59f1fd55d543647f12a5da43",
  26. ...       "name": "AE1QG1_SP",
  27. ...       "label": "1.2 ADVERSE EVENTS AEYN !=N"
  28. ...     },
  29. ...     "details": None
  30. ...   }]
  31. >>> dd
  32. [{'dataset': {'name': 'AE1QG1', 'label': '1 ADVERSE EVENTS', 'id': '59f1f3b7d543647f13dae2e4'}, 'status': 'unchanged', 'details': None}, {'dataset': {'name': 'AE1QG1_AGG', 'label': '1.1 ADVERSE EVENTS aggregated', 'id': '59f1fb4fd543647f13daec14'}, 'status': 'unchanged', 'details': None}, {'dataset': {'name': 'AE1QG1_SP', 'label': '1.2 ADVERSE EVENTS AEYN !=N', 'id': '59f1fd55d543647f12a5da43'}, 'status': 'unchanged', 'details': None}]
  33. >>> tt = [i['dataset'] for i in dd]
  34. >>> tt
  35. [{'name': 'AE1QG1', 'label': '1 ADVERSE EVENTS', 'id': '59f1f3b7d543647f13dae2e4'}, {'name': 'AE1QG1_AGG', 'label': '1.1 ADVERSE EVENTS aggregated', 'id': '59f1fb4fd543647f13daec14'}, {'name': 'AE1QG1_SP', 'label': '1.2 ADVERSE EVENTS AEYN !=N', 'id': '59f1fd55d543647f12a5da43'}]
  36. >>> pd.DataFrame(tt)
  37.                          id                          label        name
  38. 0  59f1f3b7d543647f13dae2e4               1 ADVERSE EVENTS      AE1QG1
  39. 1  59f1fb4fd543647f13daec14  1.1 ADVERSE EVENTS aggregated  AE1QG1_AGG
  40. 2  59f1fd55d543647f12a5da43    1.2 ADVERSE EVENTS AEYN !=N   AE1QG1_SP
复制代码
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
刘彦楼 + 100 + 5 + 5 + 5 精彩帖子
我的素质低 + 20 精彩帖子
残阳_等待 + 100 + 5 + 1 精彩帖子

总评分: 经验 + 200  论坛币 + 25  学术水平 + 5  热心指数 + 6  信用等级 + 5   查看全部评分

板凳
小宝爱波1314 发表于 2017-11-14 10:18:06
fengxingliulizi 发表于 2017-11-13 17:05
直接用dataframe只能解析一级字典,但是dataset这个key下面的二级字典解析不了呀

报纸
小宝爱波1314 发表于 2017-11-14 10:22:00
hubifeng? 发表于 2017-11-13 21:43
这种方式只是单独解析了dataset的二级字典,而且用了固定参数dataset,如果key的名字换了的话这段code的重复利用程度不高。能不能先把所有的一级二级字典全部平铺开之后再用dataframe转化

地板
hubifeng? 学生认证  发表于 2017-11-15 21:09:51
  1. dd=[
  2.   {
  3.     "status": "unchanged",
  4.     "dataset": {
  5.       "id": "59f1f3b7d543647f13dae2e4",
  6.       "name": "AE1QG1",
  7.       "label": "1 ADVERSE EVENTS"
  8.     },
  9.     "details": None
  10.   },
  11.   {
  12.     "status": "unchanged",
  13.     "dataset": {
  14.       "id": "59f1fb4fd543647f13daec14",
  15.       "name": "AE1QG1_AGG",
  16.       "label": "1.1 ADVERSE EVENTS aggregated"
  17.     },
  18.     "details": None
  19.   },
  20.   {
  21.     "status": "unchanged",
  22.     "dataset": {
  23.       "id": "59f1fd55d543647f12a5da43",
  24.       "name": "AE1QG1_SP",
  25.       "label": "1.2 ADVERSE EVENTS AEYN !=N"
  26.     },
  27.     "details": None
  28.   }]

  29. import collections

  30. def flatten(d, parent_key='', sep='_'):
  31.     items = []
  32.     for k, v in d.items():
  33.         new_key = parent_key + sep + k if parent_key else k
  34.         if isinstance(v, collections.MutableMapping):
  35.             items.extend(flatten(v, new_key, sep=sep).items())
  36.         else:
  37.             items.append((new_key, v))
  38.     return dict(items)

  39. import pandas as pd
  40. dd1 = [flatten(i) for i in dd]
  41. pd.DataFrame(dd1)
复制代码

7
小宝爱波1314 发表于 2017-11-17 09:35:13
hubifeng? 发表于 2017-11-15 21:09
这个好用,我要好好琢磨一下您的code,多谢指点

8
gjinwei 发表于 2017-11-21 23:36:29
经常碰到嵌套多层对象的情形,一是可以存到NOSQL数据库里,二是做扁平操作。给个代码量稍少的
  1. import pandas as pd
  2. null=None
  3. dd=[
  4.   {
  5.     "status": "unchanged",
  6.     "dataset": {
  7.       "id": "59f1f3b7d543647f13dae2e4",
  8.       "name": "AE1QG1",
  9.       "label": "1 ADVERSE EVENTS"
  10.     },
  11.     "details": null
  12.   },
  13.   {
  14.     "status": "unchanged",
  15.     "dataset": {
  16.       "id": "59f1fb4fd543647f13daec14",
  17.       "name": "AE1QG1_AGG",
  18.       "label": "1.1 ADVERSE EVENTS aggregated"
  19.     },
  20.     "details": null
  21.   },
  22.   {
  23.     "status": "unchanged",
  24.     "dataset": {
  25.       "id": "59f1fd55d543647f12a5da43",
  26.       "name": "AE1QG1_SP",
  27.       "label": "1.2 ADVERSE EVENTS AEYN !=N"
  28.     },
  29.     "details": null
  30.   }]

  31. df1 = pd.DataFrame([item.pop('dataset') for item in dd])
  32. df2 = pd.DataFrame(dd)
  33. df =df1.merge(df2,left_index=True, right_index=True)

  34. df.to_csv('1.txt')
复制代码

已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
刘彦楼 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

9
小宝爱波1314 发表于 2017-11-24 08:41:38
gjinwei 发表于 2017-11-21 23:36
经常碰到嵌套多层对象的情形,一是可以存到NOSQL数据库里,二是做扁平操作。给个代码量稍少的
学习啦,我也经常碰到

10
小宝爱波1314 发表于 2018-1-8 14:14:39
gjinwei 发表于 2017-11-21 23:36
经常碰到嵌套多层对象的情形,一是可以存到NOSQL数据库里,二是做扁平操作。给个代码量稍少的
如果遇到嵌套结构较多,每个嵌套结构都可能有一些变化的怎么办呢?比如:

[
  {
    "status": "changed",
    "dataset": {
      "id": "5a4b463c855d783af4f5f695",
      "name": "AE_E",
      "label": "1- ADVERSE EVENTS - Not Analyzed"
    },
    "details": {
      "variables": [
        {
          "variable": {
            "id": "5a4b4647855d783b494f9d3f",
            "name": "CPEVENT",
            "label": "CPEVENT"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "unary",
              "old_value": "factor"
            }
          },
          "message": "Variable with different R Type"
        },
        {
          "variable": {
            "id": "5a4b4647855d783b494f9d25",
            "name": "CPEVENT2",
            "label": "CPEVENT2"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "unary",
              "old_value": "binary"
            }
          },
          "message": "Variable with different R Type"
        },
        {
          "variable": {
            "id": "5a4b4647855d783b494f9d26",
            "name": "CP_UNSCHEDULED",
            "label": "CP_UNSCHEDULED"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "undefined",
              "old_value": "unary"
            }
          },
          "message": "Variable with different R Type"
        },
        {
          "variable": {
            "id": "5a4b4647855d783b494f9d02",
            "name": "VISIT_NUMBER",
            "label": "VISIT_NUMBER"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "unary",
              "old_value": "integer"
            }
          },
          "message": "Variable with different R Type"
        },
        {
          "variable": {
            "id": "5a4b4647855d783b494f9ccf",
            "name": "VISIT_NUMBER2",
            "label": "VISIT_NUMBER2"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "unary",
              "old_value": "binary"
            }
          },
          "message": "Variable with different R Type"
        }
      ],
      "many_visits": null
    }
  },
  {
    "status": "changed",
    "dataset": {
      "id": "5a4b465b855d783af4f5f737",
      "name": "AE_EQG2",
      "label": "2 - ADVERSE EVENTS- Not Analyzed"
    },
    "details": {
      "variables": [
        {
          "variable": {
            "id": "5a4b4666855d783b4b5175ce",
            "name": "ADVE_MEDDRA_SOC",
            "label": "SYSTEM ORGAN CLASS"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "character",
              "old_value": "factor"
            }
          },
          "message": "Variable with different R Type"
        }
      ],
      "many_visits": null
    }
  },
  {
    "status": "changed",
    "dataset": {
      "id": "5a4b467a855d783af4f5f7d7",
      "name": "AE_M",
      "label": "3- ADVERSE EVENTS MEDICATION ERROR - Not Analyzed"
    },
    "details": {
      "variables": [
        {
          "variable": {
            "id": "5a4b4682855d783b494f9dad",
            "name": "ADVE_MEDDRA_PT",
            "label": "PREFERRED TERM -PT-"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "character",
              "old_value": "factor"
            }
          },
          "message": "Variable with different R Type"
        },
        {
          "variable": {
            "id": "5a4b4682855d783b494f9d90",
            "name": "ADVE_MEDDRA_PT_CODE",
            "label": "PREFERRED TERM -PT- CODE"
          },
          "status": "changed",
          "details": {
            "r_type": {
              "new_value": "character",
              "old_value": "factor"
            }
          },
          "message": "Variable with different R Type"
        }
      ],
      "many_visits": null
    }
  },
  {
    "status": "unchanged",
    "dataset": {
      "id": "5a4b468c855d783af4f5f839",
      "name": "AGG_AE_E",
      "label": "1.1 - ADVERSE EVENTS- Aggregated by patient"
    },
    "details": null
  },
  {
    "status": "unchanged",
    "dataset": {
      "id": "5a4b469a855d783af4f5f8db",
      "name": "AGG_AE_M",
      "label": "3.2- ADVERSE EVENTS MEDICATION ERROR- Aggregated by patient"
    },
    "details": null
  }]

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 05:29