Json 在 python 重命名、删除
Json in python rename, delete
我使用这种结构处理大型 geojson 数据(超过 1 Gb)。
是其中的一部分。
{'type': 'FeatureCollection',
'crs': {'type': 'name', 'properties': {'name': 'EPSG:4326'}},
'features': [{'type': 'Feature',
'properties': {'date_create': '15.03.2008',
'statecd': '06',
'cc_date_approval': None,
'children': None,
'adate': '23.08.2017',
'cc_date_entering': '01.01.2014',
'rifr_cnt': None,
'parcel_build_attrs': None,
'rifr': None,
'sale_date': None,
'area_unit': '055',
'util_code': None,
'util_by_doc': None,
'area_value': 115558.0,
'application_date': None,
'sale': None,
'cad_unit': '383',
'kvartal': '69:3:11',
'parent_id': '69:3:11:248',
'sale_cnt': None,
'sale_doc_date': None,
'date_cost': None,
'category_type': '003008000000',
'rifr_dep': None,
'kvartal_cn': '69:03:0000011',
'parent_cn': '69:03:0000011:248',
'cn': '69:03:0000011:245',
'is_big': False,
'rifr_dep_info': None,
'sale_dep': None,
'sale_dep_uo': None,
'parcel_build': False,
'id': '69:3:11:245',
'address': '',
'area_type': '009',
'parcel_type': 'parcel',
'sale_doc_num': None,
'sale_doc_type': None,
'sale_price': None,
'cad_cost': 139698.06,
'fp': None,
'center': {'x': 33.14727379331379, 'y': 55.87764081906541}},
'geometry': {'type': 'MultiPolygon',
'coordinates': []},
我需要保存功能 'id' 和 'area_value' 重命名它们并删除其他功能,以便在嵌套的 sheet 中只有这两个键。
而且我必须保存其他数据结构,否则程序无法理解。
我只能检索数据,但不能重写它们。
我用这个方法。
pandas 我有 pd.Dataframe 我知道如何过滤和 select,但我不知道 return 或重写数据。
from pandas.io.json import json_normalize
f = 'data_file_name.json'
with open(f,'r') as dff:
data = json.loads(dff.read())
df = json_normalize(data,record_path=['features'], errors='ignore')
df
此外,我尝试使用 ijson。我这里也有同样的问题
def parse_json(json_filename):
with open(json_filename, 'rb') as input_file:
# load json iteratively
parser = ijson.parse(input_file)
for prefix, event, value in parser:
if prefix == 'features.item.properties.id':
id_val = value
if prefix == 'features.item.properties.area_value':
area_val = value
print(id_val)
# print('prefix={}, event={}, value={}'.format(pref ix, event, value))
if __name__ == '__main__':
parse_json('data_file_name.json')
谢谢大家!
如果您确定数据是 GeoJSON 并且结构正确,则此答案有效:
要读取 GeoJSON 数据,您可以使用 Geopandas
库:
import geopandas as gpd
gdf = gpd.read_file('data_file_name.json')
这将在 geopandas GeoDataFrame 中加载 GeoJSON 文件,这是一个具有空间分析功能的 pandas 数据框。
你可以阅读更多here
对数据进行操作后,您可以将其导出为 GeoJSON:
gdf.to_file('data_file_name.geojson', driver='GeoJSON')
这将保留 geojson 结构。如果您的进一步分析使用其他软件,您可以将其保存为其他空间格式,例如 Geopackage、shapefile 甚至 CSV 和 WKT 几何格式。
我使用这种结构处理大型 geojson 数据(超过 1 Gb)。 是其中的一部分。
{'type': 'FeatureCollection',
'crs': {'type': 'name', 'properties': {'name': 'EPSG:4326'}},
'features': [{'type': 'Feature',
'properties': {'date_create': '15.03.2008',
'statecd': '06',
'cc_date_approval': None,
'children': None,
'adate': '23.08.2017',
'cc_date_entering': '01.01.2014',
'rifr_cnt': None,
'parcel_build_attrs': None,
'rifr': None,
'sale_date': None,
'area_unit': '055',
'util_code': None,
'util_by_doc': None,
'area_value': 115558.0,
'application_date': None,
'sale': None,
'cad_unit': '383',
'kvartal': '69:3:11',
'parent_id': '69:3:11:248',
'sale_cnt': None,
'sale_doc_date': None,
'date_cost': None,
'category_type': '003008000000',
'rifr_dep': None,
'kvartal_cn': '69:03:0000011',
'parent_cn': '69:03:0000011:248',
'cn': '69:03:0000011:245',
'is_big': False,
'rifr_dep_info': None,
'sale_dep': None,
'sale_dep_uo': None,
'parcel_build': False,
'id': '69:3:11:245',
'address': '',
'area_type': '009',
'parcel_type': 'parcel',
'sale_doc_num': None,
'sale_doc_type': None,
'sale_price': None,
'cad_cost': 139698.06,
'fp': None,
'center': {'x': 33.14727379331379, 'y': 55.87764081906541}},
'geometry': {'type': 'MultiPolygon',
'coordinates': []},
我需要保存功能 'id' 和 'area_value' 重命名它们并删除其他功能,以便在嵌套的 sheet 中只有这两个键。
而且我必须保存其他数据结构,否则程序无法理解。
我只能检索数据,但不能重写它们。 我用这个方法。 pandas 我有 pd.Dataframe 我知道如何过滤和 select,但我不知道 return 或重写数据。
from pandas.io.json import json_normalize
f = 'data_file_name.json'
with open(f,'r') as dff:
data = json.loads(dff.read())
df = json_normalize(data,record_path=['features'], errors='ignore')
df
此外,我尝试使用 ijson。我这里也有同样的问题
def parse_json(json_filename):
with open(json_filename, 'rb') as input_file:
# load json iteratively
parser = ijson.parse(input_file)
for prefix, event, value in parser:
if prefix == 'features.item.properties.id':
id_val = value
if prefix == 'features.item.properties.area_value':
area_val = value
print(id_val)
# print('prefix={}, event={}, value={}'.format(pref ix, event, value))
if __name__ == '__main__':
parse_json('data_file_name.json')
谢谢大家!
如果您确定数据是 GeoJSON 并且结构正确,则此答案有效:
要读取 GeoJSON 数据,您可以使用 Geopandas
库:
import geopandas as gpd
gdf = gpd.read_file('data_file_name.json')
这将在 geopandas GeoDataFrame 中加载 GeoJSON 文件,这是一个具有空间分析功能的 pandas 数据框。 你可以阅读更多here
对数据进行操作后,您可以将其导出为 GeoJSON:
gdf.to_file('data_file_name.geojson', driver='GeoJSON')
这将保留 geojson 结构。如果您的进一步分析使用其他软件,您可以将其保存为其他空间格式,例如 Geopackage、shapefile 甚至 CSV 和 WKT 几何格式。