python - 从多个 JSON 文件构造 DataFrame
问题描述
我正在使用 pandas 将多个 json 文件转换为数据框。我只想要一些符合这些文件中某些条件的条目,但我要附加整个转换后的文件,然后过滤它。
假设我有 2 个如下所示的 json 文件:
文件 1500.json
[
{
"CodStore": 1500,
"CodItem": 10,
"NameItem": "Burger",
"Price": 10.0
},
{
"CodStore": 1500,
"CodItem": 20,
"NameItem": "Fries",
"Price": 3.0
},
{
"CodStore": 1500,
"CodItem": 30,
"NameItem": "Ice Cream",
"Price": 1.0
}
]
文件 1805.json
[
{
"CodStore": 1805,
"CodItem": 10,
"NameItem": "Burger",
"Price": 9.0
},
{
"CodStore": 1805,
"CodItem": 20,
"NameItem": "Fries",
"Price": 2.0
},
{
"CodStore": 1805,
"CodItem": 30,
"NameItem": "Ice Cream",
"Price": 0.5
}
]
我只希望我的数据框中包含 CodItem 10 和 30 的条目,所以我的 python 代码如下所示:
from pandas import DataFrame, read_json
df = DataFrame()
stores = [1500, 1805]
for store in stores:
filename = '%s.json' % store
df = df.append(read_json(filename))
df = df[(df.CodItem == 10) | (df.CodItem == 30)]
这只是一个例子,问题是我有超过 600 多个 json 文件,所以读取需要很多时间,数据帧变得很长,内存消耗非常高。
有没有办法只读取数据框的匹配条件?
解决方案
一种选择是将您的 JSON 数据附加到列表中,然后在最后转换一次并过滤。
coditems = [10, 30]
data = []
for filename in json_files:
data.extend(read_json(filename))
df = pd.DataFrame(data).query('CodItem in @coditems')
这应该会快很多,因为append
它是二次运算。无论如何你必须读取所有数据,所以你不妨使用熊猫来加速它。
另一种选择是在循环中初始化 DataFrame,然后pd.concat
在完成后调用。
df_list = []
for file in json_files:
df_list.append(pd.DataFrame.from_records(read_json(filename)))
df = pd.concat(df_list, ignore_index=True).query('CodItem in @coditems')
推荐阅读
- r - 是否有 R 函数/方法使您能够将自定义函数应用于分组数据帧的每一组?
- java - Maven 清洁包,关于“Invalid PropertyValueException”未找到符号的错误
- angularjs - KendoUI for AnfularJS Grid 工具栏自定义按钮样本可见性
- javascript - 选中该按钮时,将类添加到单选按钮的父级(具有特定类)
- javascript - 如何在纱线项目中的 JS repl 中加载库?
- regex - Powershell Regex 匹配 IP 和两个通配符
- c-preprocessor - _LIBCPP_INLINE_VISIBILITY 是什么?
- php - 使用 https 时 PHP readfile() 损坏的图像问题
- glibc - 使用 crosstool-ng 构建工具链时的 KERNELCONFIG
- xquery - XQuery:过滤大量数据