Используйте понимание списка с get
для работы со строками, а также, если не существует, ключ Name
в некоторой строке для логической маски и фильтрацию по boolean indexing
:
df = df[[x.get('Name') == 'Product 1' for x in df['attribute']]]
Или:
df = df[df['attribute'].apply(lambda x: x.get('Name')) == 'Product 1']
#alternative, working if all Name exist in each row
#df = df[df['attribute'].apply(lambda x: x['Name']) == 'Product 1']
print (df)
name attribute
0 abc {'attributes': {'type': 'RecordType', 'url': '...
РЕДАКТИРОВАТЬ:
Если хотите также фильтровать по вложенным словарям:
df = df[[x.get('attributes').get('type') == 'RecordType' for x in df['attribute']]]