Как я могу получить доступ к объекту или массиву внутри столбца фрейма данных?

#python #json #pandas #dataframe #data-analysis

#python #json #pandas #dataframe #анализ данных

Вопрос:

В настоящее время я пытаюсь визуализировать файл json на python. Я должен получить значения «длительность» и «расстояние» внутри объекта «match_result».

Хотя это файл json, я могу получить к ним доступ, написав эти коды на python: print(matches[0]["match_result"]["matchings"][0]["legs"][0]["duration"]) и print(matches[0]["match_result"]["matchings"][0]["legs"][0]["distance"])

введите описание изображения здесь

Но поскольку я не мог писать циклы for для визуализации и поскольку мне удобнее работать с csv-файлом, я преобразовал его в csv. И теперь это выглядит так:введите описание изображения здесь

Я пытался связаться с ними, написав data.match_result[1268].matchings[0] или data.match_result[1268]["matchings"][0] , но, конечно, они не сработали.

Итак, мой вопрос в том, как я могу получить эти значения в фрейме данных и как я могу переместить их в новый столбец?

Комментарии:

1. Вы должны преобразовать json в объект. obj = json.loads(data.match_result[1268]) ; obj["matchings"][0]["legs"] .

2. Я получаю эту ошибку: ожидаемое имя свойства, заключенное в двойные кавычки: строка 1, столбец 2 (символ 1). Когда я пишу obj = json.loads(data.match_result[1268])

Ответ №1:

Это работает:

 In [28]: df = pd.DataFrame([{'driver': 'john', 'test': {'car': [{'brand': 'ford', 'condition': 'beater'}, {'brand': 'chev', 'condition': 'new'}]}}])                                                                    

In [29]: df.test.iloc[0]['car']                                                                                                                                                                                         
Out[29]: 
[{'brand': 'ford', 'condition': 'beater'},
 {'brand': 'chev', 'condition': 'new'}]

In [30]: df.test.iloc[0]['car'][0]                                                                                                                                                                                      
Out[30]: {'brand': 'ford', 'condition': 'beater'}
 

Короче говоря, попробуйте:

 data.match_result.iloc[1268].matchings[0]
 

Комментарии:

1. Я получаю эту ошибку: объект ‘str’ не имеет атрибута ‘matchings’, когда я пишу data.match_result.iloc[1268].matchings[0] также пытался, когда вы пишете в своем ответе так: data.match_result.iloc[1268]['matchings'][0] но на этот раз получаю эту ошибку: строковые индексы должны быть целыми числами

2. Какой тип, по мнению pandas, match_results

3. Исходя из таблицы, это строка — запись JSON. Вам нужно будет передать data.match_result.iloc[1268] в json.loads, а затем манипулировать этим объектом.

4. Как я упоминал ранее, я получаю эту ошибку: ожидаемое имя свойства, заключенное в двойные кавычки: строка 1, столбец 2 (символ 1). Когда я пишу« obj = json.loads(data.match_result[1268])«