Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 21, 2021 21:29:50

Mysterion
Зарегистрирован: 2019-04-03
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Трансформация из json в dataframe

привет. не получается превратить многоуровневый json в обычную таблицу для последующего анализа. требуется помощь.

вот кусок json файла(для 2х строк):

{“type”: “FeatureCollection”, “features”: [
{“type”: “Feature”, “geometry”: {“type”: “Point”, “coordinates”: }, “properties”: {“id”: 1563301, “gibdd_id”: “195406532”, “point”: {“lat”: 55.961122, “long”: 37.412325}, “participant_categories”: , “severity”: “Тяжёлый”, “region”: “Молжаниновский”, “parent_region”: “Москва”, “datetime”: “2016-07-11 21:20:00”, “address”: “г Москва, ш Международное”, “participants_count”: 2, “injured_count”: 1, “dead_count”: 0, “category”: “Наезд на пешехода”, “light”: “Светлое время суток”, “nearby”: , “weather”: , “road_conditions”: , “vehicles”: [{“brand”: “ВАЗ”, “model”: “Kalina”, “color”: “Серый”, “year”: 2011, “category”: “А-класс (особо малый) до 3,5 м”, “participants”: [{“health_status”: “Не пострадал”, “role”: “Водитель”, “gender”: “Мужской”, “years_of_driving_experience”: 6, “violations”: }]}], “participants”: [{“health_status”: “Раненый, находящийся (находившийся) на стационарном лечении”, “role”: “Пешеход”, “gender”: “Мужской”, “violations”: }], “tags”: , “scheme”: “820”}},

{“type”: “Feature”, “geometry”: {“type”: “Point”, “coordinates”: }, “properties”: {“id”: 1529678, “gibdd_id”: “192559706”, “point”: {“lat”: 55.883, “long”: 37.606}, “participant_categories”: , “severity”: “Легкий”, “region”: “Бибирево”, “parent_region”: “Москва”, “datetime”: “2016-04-14 19:10:00”, “address”: “г Москва, ул Плещеева, 4”, “participants_count”: 3, “injured_count”: 2, “dead_count”: 0, “category”: “Наезд на пешехода”, “light”: “Светлое время суток”, “nearby”: , “weather”: , “road_conditions”: , “vehicles”: [{“brand”: “SKODA”, “model”: “Octavia”, “color”: “Серый”, “year”: 2012, “category”: “В-класс (малый) до 3,9 м”, “participants”: [{“health_status”: “Не пострадал”, “role”: “Водитель”, “gender”: “Женский”, “years_of_driving_experience”: 16, “violations”: }]}], “participants”: [{“health_status”: “Раненый, находящийся (находившийся) на амбулаторном лечении, либо которому по характеру полученных травм обозначена необходимость амбулаторного лечения (вне зависимости от его фактического прохождения)”, “role”: “Пешеход”, “gender”: “Женский”, “violations”: }, {“health_status”: “Раненый, находящийся (находившийся) на амбулаторном лечении, либо которому по характеру полученных травм обозначена необходимость амбулаторного лечения (вне зависимости от его фактического прохождения)”, “role”: “Пешеход”, “gender”: “Мужской”, “violations”: }], “tags”: , “scheme”: “820”}},


пробовал 2 способа:
1)
  import json
import pandas as pd
with open(r'moskva.geojson', encoding="utf-8") as f:
    data = json.loads(f.read())
    
data_nested = pd.json_normalize(data, record_path =['features'], max_level=3)
print(data_nested.head())

распаковывается только один уровень и все столбцы в иерархии ниже остаются массивами dict. max_level не влияет на результат

2)
 import json
from flatten_json import flatten
import pandas as pd
with open(r'moskva.geojson', encoding="utf-8") as f:
    data = json.loads(f.read())
    
flat = flatten(data)
    
data_nested = pd.json_normalize(flat)
print(data_nested.head())

Результат получается в тысячи колонок и все в одну строку.

Это то что накопал на stackoverflow и других источниках. я новичок в питоне. разжуйте пожалуйста что не так
ПС. Кусок с бд не получилось заспойлерить. Сорян

Отредактировано Mysterion (Окт. 21, 2021 21:39:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version