Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据拆分为训练/测试文件,以便为两个文件至少选取一个样本_Python_Pandas_Scikit Learn_Sklearn Pandas - Fatal编程技术网

Python 将数据拆分为训练/测试文件,以便为两个文件至少选取一个样本

Python 将数据拆分为训练/测试文件,以便为两个文件至少选取一个样本,python,pandas,scikit-learn,sklearn-pandas,Python,Pandas,Scikit Learn,Sklearn Pandas,我有一个csv文件,它被读入一个数据帧。我根据一列的值将其拆分为培训和测试文件 假设该列称为“category”,它有几个类别名称作为列值 如cat1、cat2、cat3等重复多次 我需要分割文件,使每个类别名称在两个文件中至少出现一次 到目前为止,我能够根据比率将文件拆分为两个。我尝试了很多选择,但这是迄今为止最好的一个 def executeSplitData(self): data = self.readCSV() df = data if sel

我有一个csv文件,它被读入一个数据帧。我根据一列的值将其拆分为培训和测试文件

假设该列称为“category”,它有几个类别名称作为列值 如cat1、cat2、cat3等重复多次

我需要分割文件,使每个类别名称在两个文件中至少出现一次

到目前为止,我能够根据比率将文件拆分为两个。我尝试了很多选择,但这是迄今为止最好的一个

  def executeSplitData(self):
      data = self.readCSV() 
      df = data
      if self.column in data:
         train, test = train_test_split(df, stratify = None, test_size=0.5)
         self.writeTrainFile(train)
         self.writeTestFile(test)
我不完全理解test\u train\u split中的分层选项。
请帮忙。谢谢

我试着根据使用它,但无法使
分层
工作

安装程序 如果我尝试:

train, test = train_test_split(df, stratify=df.category, test_size=.5)
train, test = train_test_split(df, stratify=df.category.values, test_size=.5)
train, test = train_test_split(df, stratify=df.category.values.tolist(), test_size=.5)
所有人都返回了一个:

TypeError:传递的参数无效:

文件说:

分层:类似数组或无(默认为无)

我想不出这为什么行不通

我决定围绕以下方面开展工作:

def stratify_train_test(df, stratifyby, *args, **kwargs):
    train, test = pd.DataFrame(), pd.DataFrame()
    gb = df.groupby(stratifyby)
    for k in gb.groups:
        traink, testk = train_test_split(gb.get_group(k), *args, **kwargs)
        train = pd.concat([train, traink])
        test = pd.concat([test, testk])
    return train, test

train, test = stratify_train_test(df, 'category', test_size=.5)
# this also works
# train, test = stratify_train_test(df, df.category, test_size=.5)

print get_freq(train.category)
print len(train)

Name: category, dtype: float64
cat4    0.400
cat3    0.284
cat2    0.208
cat1    0.108
Name: category, dtype: float64
500

print get_freq(test.category)
print len(test)

cat4    0.400
cat3    0.284
cat2    0.208
cat1    0.108
Name: category, dtype: float64
500

嗨,皮尔德。。谢谢你的帮助。但是我需要更多的信息。。每个类别都会添加到最后的两个文件中,但不会发生拆分。打印测试1类别列2 0 1 A 1 1 A 2 B 3 C 4 3 C 5 4 D 1 A 2 B 4 3 C 5 4 D>>打印列1类别列2 0 1 A 1 A 2 B 3 3 C 4 3 C 5 4 D 0 1 A 3 C
def stratify_train_test(df, stratifyby, *args, **kwargs):
    train, test = pd.DataFrame(), pd.DataFrame()
    gb = df.groupby(stratifyby)
    for k in gb.groups:
        traink, testk = train_test_split(gb.get_group(k), *args, **kwargs)
        train = pd.concat([train, traink])
        test = pd.concat([test, testk])
    return train, test

train, test = stratify_train_test(df, 'category', test_size=.5)
# this also works
# train, test = stratify_train_test(df, df.category, test_size=.5)

print get_freq(train.category)
print len(train)

Name: category, dtype: float64
cat4    0.400
cat3    0.284
cat2    0.208
cat1    0.108
Name: category, dtype: float64
500

print get_freq(test.category)
print len(test)

cat4    0.400
cat3    0.284
cat2    0.208
cat1    0.108
Name: category, dtype: float64
500