python - 如何从 json 文件中读取键值对作为 pandas 数据框?
问题描述
我有一个 JSON 文件(存储在 PATH 中),格式如下:
{"key1":[{"col1": "1", "col2": "first", "col3": "1", "col4": "a"}, {"col1": "1", "col2": "first", "col3": "2", "col4": "b"}, {"col1": "1", "col2": "first", "col3": "3", "col4": "c"}, {"col1": "2", "col2": "second", "col3": "1", "col4": "d"}], "key2":[], "key3": {} }
我想从 key1 的值创建一个数据框df ,如下所示:
col1 col2 col3 col4
1 first 1 a
1 first 2 b
1 first 1 c
1 second 1 d
现在,我写了以下单行代码来处理这种情况:
pd.DataFrame(pd.read_json(PATH, orient='index').T['key1'].to_dict()).T
我意识到我可能会做很多不必要的操作来获得所需的数据结构,并且想知道是否有更有效的方法来实现这一点?
额外:
虽然肯定不是主要问题,但我想知道是否还有一种方法可以处理我有一个附加键的值不是集合的情况(假设在上面的 JSON 中我们也有 "key4": "hello" )。目前,我的代码无法处理这种情况,因为这里不能直接应用 pandas 操作。如果这涉及大量的额外预处理,那么如果不处理这种情况就可以了。
解决方案
为什么不先从文件中加载 json,然后从您想要的子集合中创建数据框?
import json
with open(PATH, 'r') as fp:
data = json.load(fp)
df = pd.DataFrame.from_dict(data["key1"])
推荐阅读
- r - 拆分和重组数据帧时如何保留单个观察的行名?
- javascript - Angular - 无法获取父组件数据
- android - Nativescript,无法在设备上进行更改。错误是:无法读取 null 的属性“startsWith”
- javascript - 在与按钮相同的 div 块中获取跨度的内部文本
- reactjs - 如何在单个反应 js 组件中导出两个模块?
- c - C中的哈希宏定义
- python - 从 excel 创建 Python 字典
- python - Python treetaggerwrapper 返回二进制无效错误:tree-tagger.exe?
- android - 如何收听 AutocompleteSupportFragment no result found 响应
- phpstorm - 颜色/突出显示或将图标添加到项目文件下的特定文件