Получить значение из списка столбцов внутри словаря

#python #pandas #dataframe #dictionary

Вопрос:

Я хочу извлечь Value где ключ внутри словаря, где Name = Title .

имя столбца: title

Ввод:

 name     title
1        []  
2        []
3        [{'Field': '4', 'Name': 'Title', 'Value': '32ff5a'}]
4        [{'Field': '6', 'Name': 'Company', 'Value': 'XYZ'}, {'Field': '1', 'Name': 'Title', 'Value': '0ac3c3327'}]
 

Выход:

 name     title
1         
2        
3        32ff5a
4        0ac3c3327
 

Я пытался:

 df.title = df['title'].apply(lambda x: x.get('Value')[0])
 

Но я получил ошибку:

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

Ответ №1:

Попробуйте apply использовать lambda и генератор:

 df['title'] = df['title'].apply(lambda x: next((y['Value'] for y in x if y['Name'] == 'Title'), ''))
 

 >>> df
   name      title
0     1           
1     2           
2     3     32ff5a
3     4  0ac3c3327
>>> 
 

Редактировать:

Воспользуйся:

 df['title'] = df['title'].apply(lambda x: next((y.get('Value', '') for y in x if y.get('Name') == 'Title'), ''))
 

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

1. Я получаю следующую ошибку TypeError: string indices must be integers

2. @james Ah отредактирует

3. Ваше последнее изменение не распознает, является ли оно экземпляром, и заполняет столбец заголовка пустым '' . Значения из заголовка-это все хэш-коды

4. @джеймс, Покажи мне свои фактические примеры точек данных

5. Когда их двое: [{'FieldID': '689b4d67', 'Name': 'Company', 'Value': 'Google'}, {'FieldID': '184c7f18', 'Name': 'Title', 'Value': '55483e93a673ca4391c691b7117caf3c'}]