Python - Как прочитать список json объектов из Pandas DataFrame? - PullRequest
0 голосов
/ 06 августа 2020

Я просто хочу l oop через массив json объектов и получить значения 'box' .....

У меня есть DataFrame, который выглядит так

       img                    facesJson
0   2b26mn4.jpg [{'box': [57, 255, 91, 103], 'confidence': 0.7...
1   cd7ntf.jpg  [{'box': [510, 85, 58, 87], 'confidence': 0.99...
2   m9kf3e.jpg  [{'box': [328, 78, 93, 123], 'confidence': 0.9...
3   b4hx0n.jpg  [{'box': [129, 30, 38, 54], 'confidence': 0.99...
4   afx0fm.jpg  [{'box': [86, 126, 221, 298], 'confidence': 0....

и столбец 'faces Json' (dstype = object) содержит массив json объектов, которые выглядят следующим образом:

[
   {
      "box":[ 158,115,84,112 ],
      "confidence":0.9998929500579834,
   },
   {
      "box":[ 404,105, 86,114 ],
      "confidence":0.9996863603591919,
   }
]

, когда я запускаю этот код

for index,row in df.iterrows():
  df = pd.json_normalize(row['facesJson'])
  print(len(df))

я получаю эту ошибку:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-53-8be848c6d44a> in <module>()
      1 for index,row in savedList.iterrows():
----> 2   df = pd.json_normalize(row['facesJson'])
      3   print(len(df))

1 frames
/usr/local/lib/python3.6/dist-packages/pandas/io/json/_normalize.py in <genexpr>(.0)
    272 
    273     if record_path is None:
--> 274         if any([isinstance(x, dict) for x in y.values()] for y in data):
    275             # naive normalization, this is idempotent for flat records
    276             # and potentially will inflate the data considerably for

AttributeError: 'str' object has no attribute 'values'

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Я бы предложил использовать понимание списка для поиска значения 'box' в каждом JSON объекте:

df['facesJson'].apply(lambda json: [item['box'] for item in json])
0 голосов
/ 06 августа 2020

Вы можете использовать этот код на l oop для каждого элемента этого столбца.

import ast

line='[ { "box":[ 158,115,84,112 ], "confidence":0.9998929500579834, }, { "box":[ 404,105, 86,114 ], "confidence":0.9996863603591919, } ]'


parsed=ast.literal_eval(line)

print(parsed[0].keys())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...