我有一个函数执行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()
答案 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();
键/值对。删除后,错误将不再存在。