使用train_test_split拆分JSON数据集遇ValueError的问题咨询
问题分析与解决
错误核心原因
报错和JSON文件本身无关,问题出在你加载后的real_dataset或fake_dataset仅包含1个样本,而非多个样本组成的集合。train_test_split要求输入是包含多个样本的可迭代对象(比如列表、数组、DataFrame),当只有1个样本时,按test_size=0.25计算,测试集大小会被取整为0,训练集直接为空,触发报错。
排查与解决步骤
检查JSON文件结构
打开你的JSON文件,确认内容格式:- 如果是单个对象(比如
{"field1": "val1", "field2": "val2"}):加载后得到单个字典,自然只有1个样本,这种情况拆分没有实际意义。 - 如果是嵌套结构(比如
{"samples": [{}, {}, ...]}):需要先提取出样本列表,示例代码:with open(r'C:\Users\\Documents\Github\\data\training profile sentence real profiles.json', 'r') as f: data = json.load(f) real_dataset = data["samples"] # 取出包含多个样本的数组 - 如果是样本数组(比如
[{}, {}, ...]):那说明你加载的文件里确实只有1个元素,需要确认数据是否正确。
- 如果是单个对象(比如
修正结构后再拆分
确保real_dataset和fake_dataset是包含多个样本的列表/数组,之后再执行拆分:real_train, real_valid = train_test_split(real_dataset, test_size=0.25, shuffle=True) fake_train, fake_valid = train_test_split(fake_dataset, test_size=0.25, shuffle=True)极小数据集的手动拆分
如果样本量确实极小(比如2-3个),可以直接手动拆分:# 示例:取前1个为训练集,剩余为验证集 real_train = real_dataset[:1] real_valid = real_dataset[1:]
补充说明
train_test_split不限制数据来源(JSON/CSV/DataFrame都可以),只要输入是包含多个样本的可迭代集合就能正常工作。你之前用DataFrame没问题,是因为DataFrame本身就是样本集合的结构,这次只是JSON加载后的数据结构不符合要求。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

