Python如何将Plaid银行API响应加载为pandas DataFrame
问题根因
Plaid 8.0+版本的Python SDK返回的响应结果是预定义的模型类实例,而非原生Python字典。虽然该类实现了__getitem__方法支持response['accounts']式的取值,但pd.json_normalize要求输入为原生字典/列表结构,无法识别自定义模型对象的内部结构,因此触发NotImplementedError报错。
最优实现方案
不需要做字符串替换这类鲁棒性差的操作,也不需要冗余的序列化再反序列化流程,直接调用响应实例自带的to_dict()方法转为原生字典后传入json_normalize即可:
request = AccountsBalanceGetRequest(access_token=token) response = client.accounts_balance_get(request) # 直接调用SDK内置的to_dict方法转原生字典 df = pd.json_normalize(response.to_dict(), record_path=['accounts'])
如果仅需要处理accounts字段的内容,也可以直接提取该字段做转换,性能更优:
df = pd.json_normalize([account.to_dict() for account in response['accounts']])
补充说明
你之前验证的json.loads(json.dumps(response.to_dict()))方案本质是为了确保所有嵌套结构都转为原生Python类型,绝大多数场景下response.to_dict()已经能输出完全符合要求的原生字典,只有当SDK版本存在特殊嵌套模型未被to_dict()递归转换的极端情况时,才需要额外做一次序列化+反序列化操作。
内容的提问来源于stack exchange,提问作者SteelReyn
相关产品推荐
相关产品推荐

