将 JSON API 数据标准化为列

Normalize JSON API data to columns

我正在尝试从我们的 Hubspot CRM 数据库中获取数据并使用 pandas 将其转换为数据框。我仍然是 python 的初学者,但我无法让 json_normalize 工作。

数据库的输出是这样的JSON格式:

{'archived': False,
 'archived_at': None,
 'associations': None,
 'created_at': datetime.datetime(2019, 12, 21, 17, 56, 24, 739000, tzinfo=tzutc()),
 'id': 'xxx',
 'properties': {'createdate': '2019-12-21T17:56:24.739Z',
                'email': 'xxxxx@xxxxx.com',
                'firstname': 'John',
                'hs_object_id': 'xxx',
                'lastmodifieddate': '2020-04-22T04:37:40.274Z',
                'lastname': 'Hansen'},
 'updated_at': datetime.datetime(2020, 4, 22, 4, 37, 40, 274000, tzinfo=tzutc())}, {'archived': False,
 'archived_at': None,
 'associations': None,
 'created_at': datetime.datetime(2019, 12, 21, 17, 52, 38, 485000, tzinfo=tzutc()),
 'id': 'bbb',
 'properties': {'createdate': '2019-12-21T17:52:38.485Z',
                'email': 'bbb@bbb.dk',
                'firstname': 'John2',
                'hs_object_id': 'bbb',
                'lastmodifieddate': '2020-05-19T07:18:28.384Z',
                'lastname': 'Hansen2'},
 'updated_at': datetime.datetime(2020, 5, 19, 7, 18, 28, 384000, tzinfo=tzutc())}, {'archived': False,
 'archived_at': None,
 'associations': None,

等 尝试使用此代码将其放入数据框中:

import hubspot
import pandas as pd
import json
from pandas.io.json import json_normalize
import os

client = hubspot.Client.create(api_key='################')

all_contacts = contacts_client = client.crm.contacts.get_all()

df=pd.io.json.json_normalize(all_contacts,'properties')
df.head

df.to_csv ('All contacts.csv')

但我一直收到无法解决的错误。

我也试过

pd.dataframe(all_contacts)

pf.dataframe.from_dict(all_contacts)

all_contacts 变量是一个类似字典的元素列表。因此,为了创建数据框,我使用列表理解来创建一个元组,该元组仅包含每个类似字典的元素的 'properties'。

import datetime
import pandas as pd
from dateutil.tz import tzutc

data = ({'archived': False,
         'archived_at': None,
         'associations': None,
         'created_at': datetime.datetime(2019, 12, 21, 17, 56, 24, 739000, tzinfo=tzutc()),
         'id': 'xxx',
         'properties': {'createdate': '2019-12-21T17:56:24.739Z',
                        'email': 'xxxxx@xxxxx.com',
                        'firstname': 'John',
                        'hs_object_id': 'xxx',
                        'lastmodifieddate': '2020-04-22T04:37:40.274Z',
                        'lastname': 'Hansen'},
         'updated_at': datetime.datetime(2020, 4, 22, 4, 37, 40, 274000, tzinfo=tzutc())},
        {'archived': False,
         'archived_at': None,
         'associations': None,
         'created_at': datetime.datetime(2019, 12, 21, 17, 52, 38, 485000, tzinfo=tzutc()),
         'id': 'bbb',
         'properties': {
             'createdate': '2019-12-21T17:52:38.485Z',
             'email': 'bbb@bbb.dk',
             'firstname': 'John2',
             'hs_object_id': 'bbb',
             'lastmodifieddate': '2020-05-19T07:18:28.384Z',
             'lastname': 'Hansen2'},
         'updated_at': datetime.datetime(2020, 5, 19, 7, 18, 28, 384000, tzinfo=tzutc())})
df = pd.DataFrame([row['properties'] for row in data])
print(df)

输出:

                 createdate            email  ...          lastmodifieddate lastname
0  2019-12-21T17:56:24.739Z  xxxxx@xxxxx.com  ...  2020-04-22T04:37:40.274Z   Hansen
1  2019-12-21T17:52:38.485Z       bbb@bbb.dk  ...  2020-05-19T07:18:28.384Z  Hansen2

[2 rows x 6 columns]