无法创建具有特定数量的类标签的熊猫数据框

Posted

技术标签:

【中文标题】无法创建具有特定数量的类标签的熊猫数据框【英文标题】:Unable to create pandas dataframe with particular number of class label 【发布时间】:2021-01-18 03:43:29 【问题描述】:

是否可以创建一个随机的 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。

【问题讨论】:

【参考方案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))))

【讨论】:

以上是关于无法创建具有特定数量的类标签的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

无法在特定时间从数据框熊猫获取值

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

从熊猫数据框中提取在特定列中具有特定值的所有行

删除熊猫数据框中具有特定值的行[重复]

熊猫:返回具有特定非连续列选择的新数据框[重复]

熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]