首页 > 解决方案 > Json_normalize 逐个字符地给出结果

问题描述

我目前正在尝试使用 pandas 规范化一个 json 文件,但在处理它时遇到了问题。

json 文件如下所示:

{ "valid": false, 
  "checks": {"bank_check": {"valid": true, "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}, 
              "company_check": {"valid": true, "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}, 
              "ceo_check": {"valid": true, "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}}

我有兴趣在这样的表中获取支票列表:

| bank_check  | company_check | ceo_check|
------------------------------------------
| true        | true          | true     |

但是当我使用 json_normalize 我得到这个:

json_normalize 逐个字符的结果

如果我使用works_data=json_normalize(d[1], record_path=['result', 'checks']),我得到错误string indices must be integers

以前有人遇到过这种情况吗?或者你知道为什么我会得到这个奇怪的结果吗?

预先感谢您的回复。

标签: pythonjsonpandas

解决方案


不知道为什么会出现这个问题(请注意示例中的 json 缺少 close })。不过,我尝试自己对其进行规范化,并能够产生您想要的输出:

from pandas.io.json import json_normalize

d = { "valid": 'false', 
   "checks": {"bank_check": {"valid": 'true', "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}, 
              "company_check": {"valid": 'true', "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}, 
              "ceo_check": {"valid": 'true', "reasons": {}, "last_checked_at": "2019-02-19", "first_checked_at": "2019-02-01"}}}



df = json_normalize(d['checks'])
cols = [ col for col in list(df.columns) if 'valid' in col ]   

works_data = df[cols] 

输出:

print (works_data)
  bank_check.valid ceo_check.valid company_check.valid
0             true            true                true

推荐阅读