Как перебрать вложенные словари в JSON - PullRequest
2 голосов
/ 01 июля 2019

У меня есть файл JSON, который дает полигоны окрестностей Чикаго.Вот небольшой пример формы.

{'type': 'Feature',
 'properties': {'PRI_NEIGH': 'Printers Row',
  'SEC_NEIGH': 'PRINTERS ROW',
  'SHAPE_AREA': 2162137.97139,
  'SHAPE_LEN': 6864.247156},
 'geometry': {'type': 'Polygon',
  'coordinates': [[[-87.62760697485339, 41.87437097785366],
    [-87.6275952566332, 41.873861712441126],
    [-87.62756611032259, 41.873091933433905],
    [-87.62755513014902, 41.872801941012725],
    [-87.62754038267386, 41.87230261598636],
    [-87.62752573582432, 41.8718067089444],
    [-87.62751740010017, 41.87152447340544],
    [-87.62749380061304, 41.87053328991345],
    [-87.62748640976544, 41.87022285721281],
    [-87.62747968351987, 41.86986997314866],
    [-87.62746758964467, 41.86923545315858],
    [-87.62746178584428, 41.868930955522266]

Я хочу создать фрейм данных, в котором у меня есть каждый 'SEC_NEIGH', связанный с координатами таким образом, что

df['SEC_NEIGH'] = 'coordinates'

Я пыталсяиспользуя цикл for для циклического перемещения по словарям, но когда я это делаю, фрейм данных выдает только '_'

df = {}
for item in data:
    if 'features' in item:
        if 'properties' in item:
            nn = item.get("properties").get("PRI_NEIGH")
        if 'geometry' in item:
            coords = item.get('geometry').get('coordinates')
            df[nn] = coords

df_n=pd.DataFrame(df)

Я ожидал чего-то, где каждый столбец будет отдельной окрестностью, только содно значение, это список координат.Вместо этого мой информационный фрейм выводится как одно подчеркивание ('_').Что-то не так с моим циклом for?

1 Ответ

0 голосов
/ 01 июля 2019

попробуйте это:

import pandas as pd
data=[
{'type': 'Feature',
 'properties': {'PRI_NEIGH': 'Printers Row',
  'SEC_NEIGH': 'PRINTERS ROW',
  'SHAPE_AREA': 2162137.97139,
  'SHAPE_LEN': 6864.247156},
 'geometry': {'type': 'Polygon',
  'coordinates': [[-87.62760697485339, 41.87437097785366],
    [-87.6275952566332, 41.873861712441126],
    [-87.62756611032259, 41.873091933433905],
    [-87.62755513014902, 41.872801941012725],
    [-87.62754038267386, 41.87230261598636],
    [-87.62752573582432, 41.8718067089444],
    [-87.62751740010017, 41.87152447340544],
    [-87.62749380061304, 41.87053328991345],
    [-87.62748640976544, 41.87022285721281],
    [-87.62747968351987, 41.86986997314866],
    [-87.62746758964467, 41.86923545315858],
    [-87.62746178584428, 41.868930955522266]]
              }}
      ]

df = {}
for item in data:
    if  item["type"] =='Feature':
        if 'properties' in item.keys():
            nn = item.get("properties").get("PRI_NEIGH")
        if 'geometry' in item:
            coords = item.get('geometry').get('coordinates')
            df[nn] = coords
df_n=pd.DataFrame(df)
print(df_n)

выход:

                               Printers Row
0    [-87.62760697485339, 41.87437097785366]
1    [-87.6275952566332, 41.873861712441126]
2   [-87.62756611032259, 41.873091933433905]
3   [-87.62755513014902, 41.872801941012725]
4    [-87.62754038267386, 41.87230261598636]
5     [-87.62752573582432, 41.8718067089444]
6    [-87.62751740010017, 41.87152447340544]
7    [-87.62749380061304, 41.87053328991345]
8    [-87.62748640976544, 41.87022285721281]
9    [-87.62747968351987, 41.86986997314866]
10   [-87.62746758964467, 41.86923545315858]
11  [-87.62746178584428, 41.868930955522266]
...