如何从 json 中消除空值

how to eliminate null values from json

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

CSV

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 文件读取到数据帧并使用下面的代码

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)

两者都不工作。

谁能帮我消除空值?

您可以从 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
    }

您可以尝试逐行导出

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"}

试试这个:

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

试试这段代码。它应该工作 将 pandas 导入为 pd

df = pd.read_csv(name_of_the_file)

print(df.dropna(轴=1).to_dict("记录"))

这里我们使用 pandas lib 读取 csv 文件,然后我们使用 dropna 方法,该方法用于从 row/columns 中删除所有空值。轴 1 表示我们必须删除空列