传递给函数时,Dict显示为None

时间:2017-10-24 18:05:10

标签: python json pandas dictionary

我有一个函数执行API调用并返回一条记录,最终将转换为数据框。

处理请求的两个函数如下:

"віч на́ віч"

返回一个对象然后打印到控制台。该对象非常长,但看起来像这样:

def get_json(url, params={}):
    headers = {"Authorization": "Bearer {}".format(get_token())}
    r = requests.get(url, params=params, headers=headers)
    return r.json()


def retrieve_record(record=None, profile_ID=None, page_ID=None):
    profile_ID = str(profile_ID)
    pages_ID = str(page_ID)
    print_function_call("retrieve_record()", [profile_ID, pages_ID])
    return get_json(root_path + '/exzact/api/v60/profiles/{}/pages/{}/records/{}'.format(profile_ID, pages_ID, record))

对象内部有明显的数据。但是,当我尝试将其转换为如下数据框时:

{u'created_date': u'2017-10-24T17:41:15+00:00', ...}

我在回复中收到此错误:

df = pd.DataFrame()
obj = retrieve_record(profile_ID=profile_ID, page_ID=page_ID, record=ID)
data = pd.DataFrame.from_dict(obj, orient='index')

现在我可以假设错误发生在Error: object of type 'NoneType' has no len() 函数调用中。但我不知道为什么。我通过的字典清楚地包含了数据,但它被评估为pd.DataFrame.from_dict()

我正在寻找关于我的字典对象可能出错的建议。也许字典中的某些字段是NoneType,而不是整个对象本身?

TRACEBACK

NoneType

完整字典

Traceback (most recent call last):
  File "", line 456, in <module>
    newDF = create_DF(profile_ID, page_ID, today_ids)
  File "", line 211, in create_DF
    data = pd.DataFrame.from_dict(obj, orient='index')
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 861, in from_dict
    return cls(data, index=index, columns=columns, dtype=dtype)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 314, in __init__
    arrays, columns = _to_arrays(data, columns, dtype=dtype)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 5715, in _to_arrays
    dtype=dtype)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 5792, in _list_to_arrays
    content = list(lib.to_object_array(data).T)
  File "pandas\_libs\src\inference.pyx", line 1614, in pandas._libs.lib.to_object_array (pandas\_libs\lib.c:66831)
TypeError: object of type 'NoneType' has no len()

3 个答案:

答案 0 :(得分:1)

但显然字典密钥例如:u&#39; company_sub_post_installation_clean_up&#39;并且相应的值在第一时间似乎无效,所以我想那些应该被整理出来,这样就不会产生任何无条目。但是,如果您的解决方法可以解决问题,那就太好了!

答案 1 :(得分:0)

也许返回r.json()。decode(&#39; utf-8&#39;)会对此有所帮助吗?

答案 2 :(得分:0)

在这里回答我自己的问题:

问题不在于字典本身是None,而是它保持None类型的值。之所以没有引起注意,是因为我们之前使用的脚本需要填写记录中的所有字段。

然而,这一次围绕很多记录字段是可选的填写。在将None键/值对转换为DataFrame之前,必须从字典中删除 String hqlQueryString = query.unwrap(org.hibernate.Query.class).getQueryString(); ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory(); SessionImplementor hibernateSession = em.unwrap(SessionImplementor.class); QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory()); queryTranslator.compile(java.util.Collections.EMPTY_MAP, false); String sqlQueryString = queryTranslator.getSQLString(); 键/值对。删除后,错误将不再存在。