【问题标题】:Unable to create pandas dataframe with particular number of class label无法创建具有特定数量的类标签的熊猫数据框
【发布时间】:2026-01-18 19:10:01
【问题描述】:
是否可以创建一个随机的 pandas 数据框,其中 1500 行的类标签为 0,500 行的类标签为 1。
应该是这样的
feature_1 class_label
sdfdsfsdfd 0
kjdkfkjdsf 0
jkkjhjknn 1
dfsfgdsfd 0
gfdgdfsdd 1
feature_1 列的值可以是任何值,但它的 1500 个值应具有标签 0 和 500 个值
应该有标签 1。
【问题讨论】:
标签:
python
pandas
dataframe
machine-learning
【解决方案1】:
我们可以在这里使用numpy,并使用np.random.choice从列长度的range中抽取随机样本:
a = np.zeros(2000, dtype='int')
a[np.random.choice(range(len(a)), 500)] = 1
pd.Series(a).rename_axis('feature_1').reset_index(name='label')
feature_1 label
0 0 0
1 1 0
2 2 0
3 3 0
4 4 0
... ... ...
1995 1995 1
1996 1996 1
1997 1997 0
1998 1998 1
1999 1999 0
[2000 rows x 2 columns]
或者另一个想法是:
(pd.Series(np.r_[[0]*1500, [1]*500], name='label')
.sample(frac=1)
.rename_axis('feature_1')
.reset_index(name='label'))
feature_1 label
0 311 0
1 217 0
2 1940 1
3 1538 1
4 1904 1
... ... ...
1995 550 0
1996 836 0
1997 1065 0
1998 1343 0
1999 1070 0
[2000 rows x 2 columns]
【解决方案2】:
试试这个:
import random
import string
import numpy as np
import pandas as pd
def get_random_string(length):
letters = string.ascii_lowercase
result_str = ''.join(random.choice(letters) for i in range(length))
return result_str
arr=[]
label=[]
for i in range(2000):
if i<1500:
label.append(0)
else:
label.append(1)
arr.append(get_random_string(8))
df=pd.DataFrame([arr,label]).T
df.columns=['f1','label']
df.head()
输出:
f1 label
0 twfzvgpp 0
1 fvndhbaq 0
2 sawoflua 0
3 yqdgqtmx 0
4 glfsdyix 0
Source
【解决方案3】:
class_label= random.sample(
[0 for i in range(1500)]+[1 for i in range(500)])
df = pd.dataframe(dict(
class_label= class_label,
feature_1=list(range(2000))))