我有一个.json文件,其中包含一些数据,是通过导出mongoDB数据库集合获得的。为了测试对数据执行机器学习训练和测试,我想按照特定的测试-训练比率将json文件拆分为2个单独的文件,而这在我的Python笔记本或mongoDB控制台上是无法做到的
我尝试使用记事本手动拆分记录,但这不能确保我需要拆分的准确性。
我还尝试将json文件转换为Pandas数据帧,但是随后我丢失了存储数据的格式,因为to_json()
首先保存第一列的所有记录,然后保存第二列的所有记录,依此类推。 ,这是我不需要的。
我的json文件可用here!
答案 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