假设我有一个包含 100 个句子的数据框(50 个垃圾邮件,50 个不是垃圾邮件)
目标:我需要将它们分开用于训练:测试数据,比例为80:20
这将是80 个测试数据(40 个垃圾邮件 + 40 个非垃圾邮件)和 20 个测试数据(10 个垃圾邮件 + 10 个非垃圾邮件)
注意:我正在使用熊猫,我需要这些比率本身就是一个变量,以便我可以更改它
我在哪里:
import pandas as pd
df = pd.DataFrame({'sentence': {0: 'FU bro',
1: 'Well thats kinda cool',
2: 'Haha thats so funny',
3: 'cant u make somethin else mtfk',
4: 'what a shame'},
'label': {0: 'spam', 1: 'not spam', 2: 'not spam', 3: 'spam', 4: 'spam'}})
spam = df.loc[df['label']=='spam']
not_spam = df.loc[df['label']=='not spam']
print(spam)
print(not_spam)
#print(df.loc[df['label']=='not spam'].sum)
这是我的数据帧的标题:
一句话 | 标签 |
---|---|
福哥 | 垃圾邮件 |
那还挺酷的 | 不是垃圾邮件 |
哈哈好笑 | 不是垃圾邮件 |
你不能做别的东西吗mtfk | 垃圾邮件 |
可惜了 | 垃圾邮件 |
答案 0 :(得分:2)
您可以使用 DataFrame.sample()
:
training_data_ratio = 0.8
train_spam = spam.sample(frac=training_data_ratio, random_state=0)
test_spam = spam.drop(train_spam.index)
对于非垃圾邮件数据也类似。
另外,如果您需要检查有多少条目是垃圾邮件和非垃圾邮件,可以使用value_counts
:
>>> df.label.value_counts()
spam 3
not spam 2
Name: label, dtype: int64
答案 1 :(得分:1)
试试这个:
train = df.groupby('label').sample(frac=.8)
test = df.loc[df.index.difference(train.index)]