#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'}]