python 如何从JSON中消除空值

3yhwsihp  于 2023-02-07  发布在  Python
关注(0)|答案(4)|浏览(244)

我必须将csv转换为json并消除空值。
彻夫

ID   Col1   Col2  Col3  Col4
1    123    Null  ABC   Null
2    Null   456   ABC   Null
3    123    345   ABC   Null

我想消除所有的空值,然后创建一个json文件,或者创建json并消除所有的空值。
我的json文件应该像:

{"ID":"1","Col1":"123","Col3":"ABC"}
{"ID":"2","Col2":"456","Col3":"ABC"}
{"ID":"2","Col1":"123","Col2":"345","Col3":"ABC"}

I tried with dropna(axis=0/1,how=all/any) in csv

此外,在写入json之后,我再次将json文件读取到 Dataframe ,并使用以下代码

with open('data.json') as f:
    json_dict = json.load(f)
for key in json_dict:
    if json_dict[key] is NULL:
         json_dict.pop(key)

两者都不起作用。
有人能帮我消除空值吗?

wqsoz72f

wqsoz72f1#

您可以尝试逐行导出

df = df.replace('Null', pd.NA)

with open('data.json', mode='a', newline='\n') as f:
    for idx, row in df.iterrows():
        row.dropna().to_json(f)
        f.write('\n')
data.json

{"ID":1,"Col1":"123","Col3":"ABC"}
{"ID":2,"Col2":"456","Col3":"ABC"}
{"ID":3,"Col1":"123","Col2":"345","Col3":"ABC"}
xytpbqjk

xytpbqjk2#

试试这个:

def remove_empty_elements(d):
"""recursively remove empty lists, empty dicts, or None elements from a dictionary"""

def empty(x):
    return x is None or x == {} or x == []

if not isinstance(d, (dict, list)):
    return d
elif isinstance(d, list):
    return [v for v in (remove_empty_elements(v) for v in d) if not empty(v)]
else:
    return {k: v for k, v in ((k, remove_empty_elements(v)) for k, v in d.items()) if not empty(v)}

来源:https://gist.github.com/nlohmann/c899442d8126917946580e7f84bf7ee7

qyuhtwio

qyuhtwio3#

您可以从该json构建字典键值,然后使用下面的函数:

def remove_null_values(d: dict) -> dict:
    return {
        key: remove_null_values(value) if isinstance(value, dict) else value
        for key, value in d.items()
        if value != None
    }
wa7juj8i

wa7juj8i4#

试试下面这段代码,它应该可以工作:

import pandas as pd

df = pd.read_csv(name_of_the_file)

print(df.dropna(axis=1).to_dict("records"))

这里我们使用panda库读取csv文件,然后使用dropna方法删除行/列中的所有空值。轴1表示我们必须删除空列

相关问题