[使用python查找JSON中的缺失值

问题描述 投票:0回答:2

我正面临这个问题,我想分离已完成和未完成的数据集。因此,我想在JSON中放入“ complete”之类的标志。输出示例。

这是我拥有的数据

data=[{'id': 'abc001',
        'demo':{'gender':'1',
               'job':'6',
               'area':'3',
               'study':'3'},
         'ex_data':{'fam':'small',
                    'scholar':'2'}},
       {'id': 'abc002',
        'demo':{'gender':'1',
               'edu':'6',
               'qual':'3',
               'living':'3'},
        'ex_data':{'fam':'',
                   'scholar':''}},
       {'id': 'abc003',
        'demo':{'gender':'1',
               'edu':'6',
               'area':'3',
               'sal':'3'}
        'ex_data':{'fam':'big',
                   'scholar':NaN}}]

输出

如何放置标记,并同时检测JSON中的NaN和NULL?

Output=[{'id': 'abc001',
        'completed':'yes',
        'demo':{'gender':'1',
               'job':'6',
               'area':'3',
               'study':'3'},
         'ex_data':{'fam':'small',
                    'scholar':'2'}},
       {'id': 'abc002',
        'completed':'no',
        'demo':{'gender':'1',
               'edu':'6',
               'qual':'3',
               'living':'3'},
        'ex_data':{'fam':'',
                   'scholar':''}},
       {'id': 'abc003',
        'completed':'no',
        'demo':{'gender':'1',
               'edu':'6',
               'area':'3',
               'sal':'3'}
        'ex_data':{'fam':'big',
                   'scholar':NaN}}]
python json missing-data
2个回答
0
投票

类似的事情应该对您有用:

data = [
    {
        'id': 'abc001',
        'demo': {
            'gender': '1',
            'job': '6',
            'area': '3',
            'study': '3'},
        'ex_data': {'fam': 'small',
                    'scholar': '2'}
    },
    {
        'id': 'abc002',
        'demo': {
            'gender': '1',
            'edu': '6',
            'qual': '3',
            'living': '3'},
        'ex_data': {'fam': '',
                    'scholar': ''}},
    {
        'id': 'abc003',
        'demo': {
            'gender': '1',
            'edu': '6',
            'area': '3',
            'sal': '3'},
        'ex_data': {'fam': 'big',
                    'scholar': None}
    }
]


def browse_dict(dico):
    empty_values = 0
    for key in dico:
        if dico[key] is None or dico[key] == "":
            empty_values += 1

        if isinstance(dico[key], dict):
            for k in dico[key]:
                if dico[key][k] is None or dico[key][k] == "":
                    empty_values += 1

    if empty_values == 0:
        dico["completed"] = "yes"
    else:
        dico["completed"] = "no"


for d in data:
    browse_dict(d)
    print(d)

输出:

{'id': 'abc001', 'demo': {'gender': '1', 'job': '6', 'area': '3', 'study': '3'}, 'ex_data': {'fam': 'small', 'scholar': '2'}, 'completed': 'yes'}
{'id': 'abc002', 'demo': {'gender': '1', 'edu': '6', 'qual': '3', 'living': '3'}, 'ex_data': {'fam': '', 'scholar': ''}, 'completed': 'no'}
{'id': 'abc003', 'demo': {'gender': '1', 'edu': '6', 'area': '3', 'sal': '3'}, 'ex_data': {'fam': 'big', 'scholar': None}, 'completed': 'no'}

请注意,我将NaN更改为None,因为在这里您最有可能显示python字典,而不是JSON文件,因为您使用的是data =

在字典中,NaN值将更改为None。如果必须将JSON转换为字典,请参考JSON module documentation

也请检查您的词典语法。您错过了几个逗号来分隔数据。


0
投票

您应该尝试

输入为

data = [{'demo': {'gender': '1', 'job': '6', 'study': '3', 'area': '3'}, 'id': 'abc001', 'ex_data': {'scholar': '2', 'fam': 'small'}}, {'demo': {'living': '3', 'gender': '1', 'qual': '3', 'edu': '6'}, 'id': 'abc002', 'ex_data': {'scholar': '', 'fam': ''}}, {'demo': {'gender': '1', 'area': '3', 'sal': '3', 'edu': '6'}, 'id': 'abc003', 'ex_data': {'scholar': None, 'fam': 'big'}}]

另外,Nan不能在Python中工作。因此,我们没有使用Nan来代替Nan。

for item in data:
   item["completed"] = 'yes'
   for key in item.keys():
      if isinstance(item[key],dict):
          for inner_key in item[key].keys():
              if (not item[key][inner_key]):
                  item["completed"] = "no"
                  break
      else:
          if (not item[key]):
              item["completed"] = "no"
              break

输出将是

 data = [{'demo': {'gender': '1', 'job': '6', 'study': '3', 'area': '3'}, 'completed': 'yes', 'id': 'abc001', 'ex_data': {'scholar': '2', 'fam': 'small'}}, {'demo': {'living': '3', 'edu': '6', 'qual': '3', 'gender': '1'}, 'completed': 'no', 'id': 'abc002', 'ex_data': {'scholar': '', 'fam': ''}}, {'demo': {'edu': '6', 'gender': '1', 'sal': '3', 'area': '3'}, 'completed': 'no', 'id': 'abc003', 'ex_data': {'scholar': None, 'fam': 'big'}}]
© www.soinside.com 2019 - 2024. All rights reserved.