json - 从 json 文件中获取 pandas 数据框
问题描述
我想展平一个 JSON 文件来创建一个 pandas DataFrame。json输出为:
{
'info': {
'status': [
],
'weightcorp': {
'weight': 4.0
}
},
'results': [
{
'instrument': 'A',
'ts': [
{
'date': '2020-12-10',
'indicators': {
'Batch': 'Daily',
'Price': '313.23653',
'Date': '2020-12-10'
}
}
]
},
{
'instrument': 'B',
'ts': [
{
'date': '2020-12-10',
'indicators': {
'Batch': 'Weekly',
'Price': '29.21',
'Date': '2020-12-10'
}
}
]
}
]
}
我正在寻找的输出DataFrame如下:
乐器 | 日期 | 批 | 价格 |
---|---|---|---|
一个 | 2020-12-10 | 日常的 | 313.23653 |
乙 | 2020-12-10 | 每周 | 29.21 |
你能帮我么?
解决方案
让我们尝试对您的数据使用自定义函数:
def flatten(d):
'''
remove all intermediate dictionaries and list
'''
ret = dict()
for k, v in d.items():
# case when value is a dictionary
if isinstance(v, dict):
sub = flatten(v)
for kk, vv in sub.items():
ret[kk] = vv
# case when value is a list
elif isinstance(v, list):
for vv in v:
ret.update(flatten(vv) )
# normal key:value pair
else: ret[k] = v
return ret
pd.DataFrame(flatten(v) for v in d['results'])
输出:
instrument date Batch Price Date
0 A 2020-12-10 Daily 313.23653 2020-12-10
1 B 2020-12-10 Weekly 29.21 2020-12-10
推荐阅读
- python - 如何使用黑色格式化程序自动打破 Python 代码中的长字符串?
- flutter - 如何从 Future 获取数据
在飞镖? - java - 创建 com.example.jpa.repository 中定义的名称为“userRepo”的 bean 时出错
- python - Pandas xlsx 比较日期,如果相等,则给出正确的 col
- html - 使用 R 中的 Web 抓取 Power BI 站点,仪表板中有多个工作表
- spring - 如何使用 Spring Data 查找所有实体,其中标题包含所有提供的值
- javascript - 如何使用侧边栏表单的输入并将其存储为 Google Apps 脚本中的全局变量?
- sql - 如何连接 3 个表,其中一个或多个给定 ID 可能存在于一个或多个表中,每个 ID 只有一行?
- ios - 列表可折叠部分的 SwiftUI 更改图标
- wordpress - 用户角色在 WordPress 中消失