Я пытаюсь преобразовать словарь вложенных словарей в кадр данных, который затем будет преобразован в CSV.
Меня интересует только извлечение всех ключей и значений из основного ключа, properties
.
dict_keys(['addedAt', 'vid', 'canonical-vid', 'merged-vids', 'portal-id', 'is-contact', 'profile-token', 'profile-url', 'properties', 'form-submissions', 'identity-profiles', 'merge-audits'])
В свойствах значения также сохраняются в виде пары ключ-значение. Вот фрагмент того, на что это похоже:
dict_items([('firstname', {'value': 'John'}), ('associatedcompanyid', {'value': '54321'}), ('hs_analytics_last_url', {'value': 'https://website.com/contactus/'}), ('more keys', {'value': 'string'})
Следующий код, кажется, делает эту работу. Но он создает только фрейм данных для одной строки.
dfobj = pd.DataFrame(dict([ (k,pd.Series(v)) for k, v in contact_dict['properties'].items() ]))
Как бы я создал для l oop, который получает все ключи, значения и внутри значений, фактическое значение - из вложенного словаря и превратить его в фрейм данных?
Сложность состоит в том, что не каждая запись будет иметь одинаковую длину массива в properties
. Итак, я получаю эту ошибку ValueError: arrays must all be same length
.
Вот код, который я запустил:
df = pd.DataFrame(contact_dict)
df1 = df.transpose()
И Вот ошибка, которую я получил в полном объеме. В строке 107 находится df = pd.DataFrame(contact_dict)
. Любые советы приветствуются:
File "C:\Users\alexs\Desktop\pythonenvs\get_hubspot_2.py", line 107, in <module>
df = pd.DataFrame(contact_dict)
File "C:\Python\Python38\lib\site-packages\pandas\core\frame.py", line 411, in __init__
mgr = init_dict(data, index, columns, dtype=dtype)
File "C:\Python\Python38\lib\site-packages\pandas\core\internals\construction.py", line 257, in init_dict
return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
File "C:\Python\Python38\lib\site-packages\pandas\core\internals\construction.py", line 77, in arrays_to_mgr
index = extract_index(arrays)
File "C:\Python\Python38\lib\site-packages\pandas\core\internals\construction.py", line 368, in extract_index
raise ValueError("arrays must all be same length")
ValueError: arrays must all be same length```