Извлечение данных из Geo JSON на основе пользовательского ввода и запись в pandas data.frame - PullRequest
0 голосов
/ 05 марта 2020

У меня большой файл Geo JSON (100 тыс. + Вложенные словари). Это макет Geo JSON:

[
{
    "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
        ]
    }
}]

Полный Geo JSON может быть доступен через:

response = requests.get('https://opendata.arcgis.com/datasets/97d710812a4a49369bd064b5be69fcd4_0.geojson')
js = json.loads(response.text)

Я хочу определить функцию, которая извлекает подмножество данных из Geo JSON и записывает их в массив данных. Функциональным входом должны быть метка датчика, период времени (от-до) и желаемое значение (PM10, NO2 и c.):

def jsonToDataFrame(label, timestamp_from, timestamp_to, unit):

, функция должна работать так, чтобы следующий вход :

jsonToDataFrame(PZ001, 2018-06-16T14:00:00.000Z, 2018-06-16T19:00:00.000Z, Value_PM10)

возвращает следующий фрейм данных:

enter image description here

Некоторое время я пытался получить нужный фрейм данных. Кто-нибудь знает как это решить?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вы можете попробовать использовать i json, чтобы загружать только то, что вам нужно, из данных JSON итеративно, с низким потреблением памяти, и фильтровать контент, который вам действительно нужен. Затем вы можете преобразовать свои результаты в фрейм данных.

0 голосов
/ 05 марта 2020

Вы можете использовать GeoDataFrame из Geopandas вместо Pandas кадра данных. Вы можете немедленно загрузить geo json в GeoDataFrame, который имеет ту же структуру и функциональность, что и Pandas dataframe.

import geopandas as gpd

path_to_geojson = "path/to/geojson"

df = gpd.read_file(path_to_geojson)
...