pandas 如何在Python中规范化具有多层嵌套信息的复杂JSON

ncecgwcz  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(174)

我以预定义的格式获取数据,我无法更改:

data = 
{
  "id": 12345,
  "name": "Doe",
  "gender": {
    "textEn": "Masculin"
  },
  "professions": [
    {
      "job_description": {
        "textEn": "Job description"
      },
      "cetTitles": [
        {
          "cetTitleType": {
            "textEn": "Recognition"
          },
          "issuanceDate": "1992-04-14T00:00:00Z",
          "phoneNumbers": [
            "123 221 00 70"
          ]
        }
      ]
    }
  ]
}

字符串
虽然我可以通过pd.json_normalize函数将数据规范化一个级别('gender'),但我很难访问层次结构中更低的信息。
例如,我尝试通过data = pd.json_normalize(data,record_path=['professions','job_description'],meta='id')获取职位描述,但我得到了一个TypeError。我如何解决这个问题并将所有数据提取到一个表中,以便将上面的数据表示为一行,所有内容都表示为字段?
我希望最终实现的输出如下所示:
| ID|名称|性别|工作描述|标题类型|发布日期|电话号码|
| --|--|--|--|--|--|--|
| 12345 |Doe|男性化|职位描述|识别|1992-04-14T00:00:00Z| 123 221 00 70 |

snz8szmq

snz8szmq1#

使用json_normalize()
代码:

df = pd.json_normalize(
    data=data,
    record_path=["professions", "cetTitles"],
    meta=["id", "name", "gender", ["professions", "job_description"]]
).explode(column="phoneNumbers")

df = df.join(pd.DataFrame(df.pop("gender").values.tolist()))
df.columns = df.columns.str.split(".").str[-1]
df = df.rename(columns={"textEn": "gender"})
df = df.join(pd.DataFrame(df.pop("job_description").values.tolist()))
df = df.rename(columns={"textEn": "job_description"})
print(df)

字符串
输出量:

issuanceDate   phoneNumbers       gender     id name    gender  job_description
0  1992-04-14T00:00:00Z  123 221 00 70  Recognition  12345  Doe  Masculin  Job description

相关问题