按标签分隔数据框(将数据框转换为 numpy 数组)

Posted

技术标签:

【中文标题】按标签分隔数据框(将数据框转换为 numpy 数组)【英文标题】:Seperate Dataframe by label (convert dataframe into numpy array) 【发布时间】:2020-10-05 22:24:30 【问题描述】:

我有一个数据框,我想根据它们的标签将它们分成不同的数组,我不确定如何通过它的索引过滤它。不确定这是否正确完成:

数据集示例(df)

Cancer_Type  | Variable | Data Split | Target
Cancer1         43        Train        Good
Cancer5         34        Train        Bad
Cancer2         34        Test         Good
Cancer3         23        Test         Bad
Cancer4         25        Test         Good

可能会做这样的事情吗?

#initial split into train/test data
train = df['split'] == 'train'
print("train")
print(train)
test = df['split'] == 'test'
print("valid")
print(test)

X_test = test.values[-1, :-1]
y_test = test.values[-1, -1]

# Get the remaining dataset
X = train.values[:-1, :-1]
y = train.values[:-1, -1]

print("X")
#print(type(X))
#print(X)

print("y")
#print(type(y))
#print(y)

# Split the remaining dataset into train and calibration sets.
X_train, X_cal, y_train, y_cal = train_test_split(X, y)
 
print(X_train.shape, y_train.shape)
print(X_cal.shape, y_cal.shape)

希望按行。

【问题讨论】:

【参考方案1】:

据我了解,您希望根据观察值的 Data Split 值将数据拆分为训练集和测试集。之后,您将再次将训练集拆分为训练和校准。标准数据预处理方法包括创建我们的特征 X 和我们的目标 y

# Get dataframes of train and test features
X_train = df[df['Data Split'] == 'Train'].drop(columns = ['Target']).to_numpy()
X_test = df[df['Data Split'] == 'Test'].drop(columns = ['Target']).to_numpy()

# Get arrays of train and test targets
y_train = df[(df['Data Split'] == 'Train')]["Target"].to_numpy()
y_test = df[(df['Data Split'] == 'Test')]["Target"].to_numpy()

# Split the train dataset further into train and validation/calibration sets.
X_train, X_cal, y_train, y_cal = train_test_split(X_train, y_train)

您现在拥有数组形式的训练、验证/校准和测试集。

如果您希望保留 Target 变量,只需

train = df[df['Data Split'] == 'Train'].to_numpy()
test = df[df['Data Split'] == 'Test'].to_numpy()

【讨论】:

(不错的用户名顺便说一句)这正是这个想法。 1. 将测试集与整个数据集分离 2. 然后使用剩余的数据集,将其拆分为训练和校准数据。 第一行代码出现语法错误X_test = df[df['split'] == 'valid'].drop(columns = ['output'].to_numpy() @bioinformatics_student 在指定要删除的列时,我错过了一个右括号。请检查更新的代码。 X_test = df[df['split'] == 'valid'].drop(columns = ['output']).to_numpy() 感谢更新,现在没有给出问题 :) 我想知道是否可以在不使用 scikit 助手的情况下手动将数据拆分为训练和测试数据(在第二步中)? @MrDoLoSoLo 抱歉我对此一无所知,我仍然对 ML 的整个主题很熟悉。

以上是关于按标签分隔数据框(将数据框转换为 numpy 数组)的主要内容,如果未能解决你的问题,请参考以下文章

将两个numpy数组转换为数据框

将numpy数组转换为数据框[重复]

将数据框转换为 numpy 数组? [复制]

将熊猫数据框转换为numpy数组[重复]

按日期分隔数据框并计算数学模型 Numpy Python

将数据框转换为 Numpy 数组 [重复]