【发布时间】:2021-03-23 21:18:32
【问题描述】:
我有一个数千行的 JSON 文件,但这里是该文件的一个简短示例。
{
"dataset_id": "??",
"areas": [
{
"boundary_id": "76",
"metric": 1.9,
"data": {
"Economic_risk": "1.9",
"Housing_risk": "3.0"
}
},
{
"boundary_id": "76",
"metric": NaN,
"data": {
"Economic_risk": "",
"Housing_risk": ""
}
}
]
}
我的目标是删除具有 NaN 度量的数据集的每个部分,这意味着风险是“”。现在我正在这样做,但这并不能摆脱一切。
import json
with open(test.json) as file:
data = json.load(file)
for area in data["areas"]:
if area["data"]["Economic_risk] == "":
del area["boundary_id"]
del area["metric"]
del area["data"]["Economic_risk"]
del area["data"]["Housing_risk"]
del area["data"]
with open("test_new.json", "w") as file:
json.dump(data, file)
这给了我
{
"dataset_id": "??",
"areas": [
{
"boundary_id": "76",
"metric": 1.9,
"data": {
"Economic_risk": "1.9",
"Housing_risk": "3.0"
}
},
{
}
]
}
但是我想要的输出是这样的
{
"dataset_id": "??",
"areas": [
{
"boundary_id": "76",
"metric": 1.9,
"data": {
"Economic_risk": "1.9",
"Housing_risk": "3.0"
}
}
]
}
谁能帮我解决这个问题?提前致谢!
【问题讨论】:
-
我认为您需要删除区域列表中对该字典对象的引用。所以像
del areas[1] -
为此使用熊猫。它是高性能的 + 您将为此获得一个班轮代码
-
@DavidYue 好吧,不要在迭代时修改。
-
@tbhaxor 在纯 python 中实现这个非常简单。获得“一个班轮”是做事的一个非常糟糕的理由,但如果你愿意,你也可以用“一个班轮”来做到这一点
-
无论如何,你可以做类似
data['areas'] = [a for a in data['areas'] if a["data"]["Economic_risk] != ""]