#python #json #pandas #dataframe
#питон #json #панды #фрейм данных
Вопрос:
У меня есть такой объект, как
l = [ {'id': 1, 'name': 'a', 'obj2': [{'a': 3, 'b': 6}, {'a':4, 'b': 5}], 'obj': [{'x': 6, 'y': 'p'}, {'x': 10, 'y': 'q', 'z': 'qqq'}]}, {'id': 2, 'name': 'b', 'obj': [{'x': 10, 'y': 'r'}], 'obj2': [{'a': 9, 'i': 's'}]} ]
и я хочу сделать его фреймом данных, как:
id name a i b x y z 1 a 3 6 6 p 1 a 3 6 10 q qqq 1 a 4 5 6 p 1 a 4 5 10 q qqq 2 b 9 s 10 r
Внутри буквы l все клавиши будут одинаковыми. Но у меня может быть другой l с другим именем ключа и разным количеством объектов со списками внутри l[0]. Мы очень ценим любую помощь.
Ответ №1:
Это идеальный вариант использования для pd.json_normalize
:
l = [{'id': 1, 'name': 'a', 'obj': [{'x': 6, 'y': 'p'}, {'x': 10, 'y': 'q', 'z': 'qqq'}]}, {'id': 2, 'name': 'b', 'obj': [{'x': 10, 'y': 'r'}]}] df = pd.json_normalize(l, 'obj', ['id', 'name']) print(df) # Output: x y z id name 0 6 p NaN 1 a 1 10 q qqq 1 a 2 10 r NaN 2 b
Udpate:
Я хочу использовать один и тот же код для каждого объекта с таким типом структуры, но,возможно,идентификатор, имя, объект будут называться по-разному
keys = list(l[0].keys()) df = pd.json_normalize(l, keys[-1], keys[:-1]) print(df) # Output: x y z id name 0 6 p NaN 1 a 1 10 q qqq 1 a 2 10 r NaN 2 b
Комментарии:
1. что делать, если ключи не всегда будут одинаковыми, я хочу использовать один и тот же код для каждого объекта,имеющего такой тип структуры,но, возможно, идентификатор, имя, объект будут называться по-разному
2. Вы можете обновить образец с таким случаем, пожалуйста?
3. Ничего сумасшедшего, но мне нужен один и тот же код для работы, даже если я изменю имя ключей. Ваше решение работает только для некоторых определенных ключей. [ {idq: 1, имя: «a», objq: [{xq:6, yq:»p»}, {xq:10, yq:»q»,zq:»qqq»}]}, {idq: 2, имя: «b», objq: [{xq:10, yq:»r»}]} ]
4. Для одного и того же списка все ключи одинаковы, не так ли?
5. @AndreiToader. Я обновил свой ответ. Не могли бы вы проверить это, пожалуйста?