Создать фрейм данных из вложенного словаря с различной длиной массива - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь преобразовать словарь вложенных словарей в кадр данных, который затем будет преобразован в 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``` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...