熊猫:json多个文件,并以奇怪的格式连接

时间:2019-01-08 15:59:02

标签: python json pandas

我很难读取结构与以前不同的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“]}]],”日期”:值}]

2 个答案:

答案 0 :(得分:0)

并非所有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

答案 1 :(得分:0)

因此,事实证明,我确实需要像manu所指的那样使用json.loads,但要注意以下几点:

json.load(open(file, encoding='utf-8-sig'))