#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
здравствуйте, я пытаюсь проанализировать этот объект json и получить только массив «результатов». массив «результаты» имеет свойства, поэтому набор элементов начинается с «property_id» и выглядит следующим образом. вот что я пробовал до сих пор;
def process_similar_list(response_json):
dataframe_list = []
for l in response_json['data']['home']['related_homes']:
_temp_df = pd.DataFrame.from_dict(l, orient='index').T
dataframe_list.append(_temp_df)
return pd.concat(dataframe_list, axis=0, ignore_index=True, sort=False)
и возвращаемая ошибка выглядит следующим образом;
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-122-c0a7104717a6> in <module>
----> 1 df_properties_similar_list = process_similar_list(response_json=property_similar_list)
2 df_properties_similar_list
<ipython-input-111-c54f548650dc> in process_similar_list(response_json)
22
23 # convert each listing to dataframe
---> 24 _temp_df = pd.DataFrame.from_dict(l, orient='index').T
25
26 # append to dataframe list for all listings
~anaconda3libsite-packagespandascoreframe.py in from_dict(cls, data, orient, dtype, columns)
1235 if len(data) > 0:
1236 # TODO speed up Series case
-> 1237 if isinstance(list(data.values())[0], (Series, dict)):
1238 data = _from_nested_dict(data)
1239 else:
AttributeError: 'str' object has no attribute 'values'
Главное, я хочу отобразить этот массив результатов следующим образом
Комментарии:
1. возможно ли опубликовать часть вашего ответа json в качестве образца?
Ответ №1:
Я считаю, что проблема в том, что вы слишком углубились в dict — Pandas DataFrame.from_dict(someDict, orient=’index’) ищет что-то вроде этого:
import pandas as pd
someDict = {"someIndexLikeValue1":{"key1":"value11",
"key2":"othervalue12"},
"someIndexLikeValue2":{"key1":"value21",
"key2":"othervalue22"}}
print(pd.DataFrame.from_dict(someDict, orient="index"))
key1 key2
someIndexLikeValue1 value11 othervalue12
someIndexLikeValue2 value21 othervalue22
Чтобы создать однострочный фрейм данных с dict, который имеет внешний ключ (что, я думаю, вы и делаете), вам нужно что-то вроде:
someOneRowDict = {"someOuterKey":{"someIndexLikeValue1":{"key1":"value11",
"key2":"othervalue12"}}}
print(pd.DataFrame.from_dict(someOneRowDict["someOuterKey"], orient="index"))
key1 key2
someIndexLikeValue1 value11 othervalue12
или, чтобы продвинуться на один уровень глубже, вам нужно преобразовать, как вы это сделали:
print(pd.DataFrame.from_dict(someOneRowDict["someOuterKey"]["someIndexLikeValue1"], orient="index").T)
key1 key2
0 value11 othervalue12
Итак, я думаю, что то, что вы сделали, эквивалентно
print(pd.DataFrame.from_dict(someOneRowDict["someOuterKey"]["someIndexLikeValue1"]["key1"], orient="index"))
что выдает ошибку:
AttributeError: 'str' object has no attribute 'values'