【问题标题】:How to transform Csv to Nested Json Using Pandas in Python如何在 Python 中使用 Pandas 将 Csv 转换为嵌套的 Json
【发布时间】:2020-04-03 11:44:32
【问题描述】:

我在将 csc 转换为嵌套 json 时遇到问题。 我在这里阅读了类似的主题,但不幸的是后来无法移动:(非常感谢您的建议。 简化后的 csv 如下所示:

而想要的json应该如下:

{"data_type": 1,"person": {"id":1,"name": "Anne","surname": "Frank"},
{"data_type": 2,"address": {"id":1,"street": "de Bruijn","city": "Amsterdam"}
{"data_type": 1,"person": {"id":2,"name": "Terry","surname": "Gilliam"},
{"data_type": 2,"address": {"id":2,"street": "Westminster","city": "London"}

我正在使用 pandas,但我正在努力解决以下问题:

  • 不知道如何避免在结构中插入空白单元格(例如:对于 1 的 data_type 不插入“地址”
  • 应根据人员 ID 进行排序
  • 我无法实现所需的结构 - 尝试使用 groupby,但仍收到其他内容...

【问题讨论】:

  • 真的有必要不插入NULL值吗?你在使用什么功能/模块?

标签: python json pandas csv


【解决方案1】:

遍历每一行并根据您的格式进行转换:

cols = ['id', 'name', 'surname', 'street', 'city']

make_dict = lambda row: {
    'data_type': row['data_type'],
    row['data_name']: row[cols].dropna().to_dict()
}
df.apply(make_dict, axis=1).to_list()

结果:

[
  {
    "data_type": 1,
    "person": {"id": 1, "name": "Anne", "surname": "Frank"}
  },
  {
    "data_type": 2,
    "address": {"id": 1, "street": "de Brujin", "city": "Amsterdam"}
  },
  {
    "data_type": 1,
    "person": {"id": 2, "name": "Terry", "surname": "Gilliam"}
  },
  {
    "data_type": 2,
    "address": {"id": 2, "street": "Westminster", "city": "London"}
  }
]

【讨论】:

  • 请问为什么不能在make_dict = lambda row: { ...中定义三级结构
  • 我的意思是:data_type = level 1, person = level 2, [cols] = level 3 ......你不知道如何将结构写入 lambda 行......?非常感谢
猜你喜欢
  • 2017-06-10
  • 2019-07-21
  • 2020-07-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2022-08-21
  • 2019-11-14
相关资源
最近更新 更多