如何拆分已导出到.json文件的mongoDB集合?

时间:2019-09-08 06:50:43

标签: python json mongodb

我有一个.json文件,其中包含一些数据,是通过导出mongoDB数据库集合获得的。为了测试对数据执行机器学习训练和测试,我想按照特定的测试-训练比率将json文件拆分为2个单独的文件,而这在我的Python笔记本或mongoDB控制台上是无法做到的

我尝试使用记事本手动拆分记录,但这不能确保我需要拆分的准确性。

我还尝试将json文件转换为Pandas数据帧,但是随后我丢失了存储数据的格式,因为to_json()首先保存第一列的所有记录,然后保存第二列的所有记录,依此类推。 ,这是我不需要的。

我的json文件可用here

1 个答案:

答案 0 :(得分:0)

文件的问题在于,它不是有效的json。如果您拥有有效的json,则可以使用json.loads()将条目作为python列表并拆分该列表,例如像that。对于您的文件,一种方法是将其转换为有效的json。但是,如果您想保留当前表单,则可以对相关行进行文件拆分。所以这应该工作:

import math

fname_all = 'reddit_india_using_mongoexport.json'
fname_train = 'reddit_india_using_mongoexport_train.json'
fname_test = 'reddit_india_using_mongoexport_test.json'

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

len = file_len(fname_all)

split_ratio = 0.8

f_train = open(fname_train, "w+")
f_test = open(fname_test, "w+")

with open(fname_all) as f:
        for i, l in enumerate(f):
            if i < math.floor(len*split_ratio):
                f_train.write(l)
            else:
                f_test.write(l)

f_train.close()
f_test.close()

print('Original file:' + str(file_len(fname_all)))
print('Train file:' + str(file_len(fname_train)))
print('Test file:' + str(file_len(fname_test)))

它给您:

  

原始文件:8076

     

培训文件:6460

     

测试文件:1616