Python 根据用户输入从GeoJSON提取数据并写入pandas data.frame
我有一个大的GeoJSON文件(100k+嵌套字典)。这是GeoJSON的布局:Python 根据用户输入从GeoJSON提取数据并写入pandas data.frame,python,json,pandas,dataframe,geojson,Python,Json,Pandas,Dataframe,Geojson,我有一个大的GeoJSON文件(100k+嵌套字典)。这是GeoJSON的布局: [ { "type": "Feature", "properties": { "OBJECTID": 2625, "id": "ZWL_4983539", "label": "PZ005", "timestamp_from": "2018-06-16T13:00:00.000Z", "timestamp_to": "20
[
{
"type": "Feature",
"properties": {
"OBJECTID": 2625,
"id": "ZWL_4983539",
"label": "PZ005",
"timestamp_from": "2018-06-16T13:00:00.000Z",
"timestamp_to": "2018-06-16T14:00:00.000Z",
"value_NO2": 14.48,
"unit_NO2": "ug/m3",
"value_PM10": 29.07,
"unit_PM10": "ug/m3",
"value_RH": 39.64,
"unit_RH": "%",
"value_P": 1014,
"unit_P": "hPa"
},
"geometry": {
"type": "Point",
"coordinates": [
6.0624,
52.54120000000001,
0
]
}
},
{
"type": "Feature",
"properties": {
"OBJECTID": 2626,
"id": "ZWL_4983451",
"label": "PZ006",
"timestamp_from": "2018-06-16T14:00:00.000Z",
"timestamp_to": "2018-06-16T15:00:00.000Z",
"value_NO2": 23.1,
"unit_NO2": "ug/m3",
"value_PM10": 21.27,
"unit_PM10": "ug/m3",
"value_RH": 35.21,
"unit_RH": "%",
"value_P": 1014,
"unit_P": "hPa"
},
"geometry": {
"type": "Point",
"coordinates": [
6.055100000000001,
52.53820000000002,
0
]
}
}]
完整的GeoJSON可通过以下方式访问:
response = requests.get('https://opendata.arcgis.com/datasets/97d710812a4a49369bd064b5be69fcd4_0.geojson')
js = json.loads(response.text)
我想定义一个函数,从GeoJSON中提取数据子集并将其写入数据帧。功能输入应为传感器标签、时间段(从到)和所需值(PM10、NO2等):
该功能的工作方式应确保以下输入:
jsonToDataFrame(PZ001, 2018-06-16T14:00:00.000Z, 2018-06-16T19:00:00.000Z, Value_PM10)
返回以下数据帧:
我一直在努力获取所需的数据帧。有人知道如何解决这个问题吗?您可以使用
Geopandas
中的GeoDataFrame
而不是Pandas数据框。您可以立即将geojson加载到GeoDataFrame中,该GeoDataFrame具有与Pandas dataframe相同的结构和功能
import geopandas as gpd
path_to_geojson = "path/to/geojson"
df = gpd.read_file(path_to_geojson)
您可以尝试使用以迭代的方式从JSON数据中只加载您需要的内容,并以较低的内存消耗过滤您实际需要的内容。然后,您可以将结果转换为数据框。感谢您的快速响应。这确实是一个容易得多的解决办法。但是,由于geojson的大小,我尽量避免将其直接加载到geodataframe。这需要一段时间来处理
import geopandas as gpd
path_to_geojson = "path/to/geojson"
df = gpd.read_file(path_to_geojson)