如何从 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 表示我们必须删除空列
我必须将 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 表示我们必须删除空列