You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用train_test_split拆分JSON数据集遇ValueError的问题咨询

问题分析与解决

错误核心原因

报错和JSON文件本身无关,问题出在你加载后的real_dataset或fake_dataset仅包含1个样本,而非多个样本组成的集合。train_test_split要求输入是包含多个样本的可迭代对象(比如列表、数组、DataFrame),当只有1个样本时,按test_size=0.25计算,测试集大小会被取整为0,训练集直接为空,触发报错。

排查与解决步骤

  1. 检查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个元素,需要确认数据是否正确。
  2. 修正结构后再拆分
    确保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)
    
  3. 极小数据集的手动拆分
    如果样本量确实极小(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:39