【问题标题】:how to eliminate null values from json如何从json中消除空值
【发布时间】:2022-06-11 21:27:31
【问题描述】:

我必须将 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)

两者都不工作。

谁能帮我消除空值?

【问题讨论】:

  • df.dropna() 应该可以工作,你确定这些是空值而不是字符串 ='Null'?
  • 您的 JSON 文件不是有效的 JSON,它是换行符分隔的 JSON,“json-lines”
  • 您需要在删除 NA 之前堆叠数据

标签: python pandas


【解决方案1】:

您可以尝试逐行导出

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

【讨论】:

  • 这是在创建重复项..
  • @chits 你什么意思?
  • 如果有 3 条记录,它正在创建一个有空值的完整集和另一个没有空值的集。
  • @chits 这里我使用追加模式,导出前确保data.json为空。
【解决方案2】:

试试这个:

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

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案3】:

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

df = pd.read_csv(name_of_the_file)

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

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

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案4】:

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

【讨论】:

  • 如何使用这个函数来解析我的json文件?
  • 您可以使用一个函数来构建一个字典,该字典基本上包含所有键:值项,其中 value != None,它递归到 dict 值。 dict 理解允许将其编码为单个语句
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2013-09-06
  • 1970-01-01
相关资源
最近更新 更多