首页 > 解决方案 > Pandas:json多个文件并以奇怪的格式连接

问题描述

我很难阅读结构与以往不同的 json 文件。json 文件的内容都在括号内:[{content}]。

这是我通常做的:

data_dir = 'data/filesDump'
filenames = os.listdir(data_dir)
filenames = [os.path.join(data_dir, f) for f in filenames if f.endswith('.json')]

train_df = pd.concat([pd.read_json(file, encoding='UTF-8') for file in filenames], 
           ignore_index = True)

我收到此错误:

ValueError:预期的对象或值

我得到的数千个 json 唯一不同的是内容在括号 [] 中。所以我怀疑这给 json_read 带来了问题?任何人都知道如何加载这种格式?

示例(我可能在括号中犯了一个错误,但这只是为了给出一个想法):

[{"id":"value","title":"value","body":"text","categories":[{"id":value,"name":"name","keys": [{"id":value,"hits":["word1","word2"]},{"id":value,"hits":["word1","word2"]}],"date":价值}]

标签: pythonjsonpandas

解决方案


并非所有 JSON 文件都可以转换为 DataFrame,需要特定格式。

您应该首先使用标准 json 模块将您的 JSON 文件转换为 Python 结构,然后您可以修改结构以适应 DataFrame 构造函数的要求。

例如,如果您的 JSON 在制作 DataFrame 所需的常用字典周围有一个额外的括号,这意味着数据包含在 @Atreus 建议的列表中,您可以通过仅获取列表的第一个元素来删除它:

import json
struct=json.loads('[{"A":{"0":1,"1":2,"2":3},"B":{"0":4,"1":5,"2":6}}]')
print pd.DataFrame(struct[0])

输出:

   A  B
0  1  4
1  2  5
2  3  6

推荐阅读