gpt4 book ai didi

python - 如何查找数据集中的重复项并对其进行排序

转载 作者:行者123 更新时间:2023-11-30 09:02:05 24 4
gpt4 key购买 nike

我有两个数据集,我用 pandas Dataframe 读取它们。我们将它们称为集合 1 和集合 2。集合 1 和集合 2 包含文本文档。第 1 组中的一些文本文档出现在第 2 组中,我正在寻找一种方法来查找这些重复项。我首先考虑使用集合,它会返回数据集交集中所有元素的列表。

set_1 = set(set_1)
set_2 = set(set_2)
duplicates = set1.intersection(set_2)

但是,我还需要做一件事。重复项应该按照集合 2 的顺序排列。为什么?第 1 组有一堆数据示例和标签,我将其用作训练集,第 2 组是我的测试集。但如果给定的示例是重复的,我想从第 1 组中的同一示例分配标签,而不是预测标签。

所以用伪代码来说:你们知道我该如何做到这一点吗?

duplicates = set_1.intersection(set_2)
for example in set_2:
if example in duplicates:
assign labels from set_1 to example
else:
predict the labels

编辑

由于我的问题的第一部分可能令人困惑,伪代码实际上是我真正想要的。因此,如果您发现我对上述问题的解释令人困惑,请查看我的伪代码以获取我想要实现的目标的摘要:

伪代码

    duplicates = set_1.intersection(set_2)
for example in set_2:
if example in duplicates:
assign labels from set_1 to example
else:
predict the labels

不幸的是,我现在必须走了,所以我无法立即回复任何评论,但当我回来时我会回复。

更新:

这是我实际代码的一部分:首先,我将训练集和测试集作为 pandas 数据框对象读取,并将它们转换为 numpy 数组,以便我能够访问各个列。

 train = pd.read_csv(os.path.join(dir,"Train.csv"))
test = pd.read_csv(os.path.join(dir,"Test.csv"))

#getting train and test sets and the labels
train = np.array(train)[:,2]
test = np.array(test)[:,2]
labels = np.array(train)[:,3]

我的想法是获取重复项列表来检查测试示例是否重复,因此我将训练集和测试集转换为集合以获得重复项。

train = set(train)
test = set(test)
duplicates = train.intersection(test)

从现在起我不知道应该如何继续。我的目标是为重复样本分配标签,这些标签应该来自训练集。所有其他样本都应该获得由我的估计器(机器学习算法)分配的标签。

简而言之:我正在使用的数据再次是文本文档。我有训练集和测试集中都出现的文本文档,我的训练集为每个示例分配了标签。对于测试集中的每个重复项,我需要在训练集中找到重复的示例,更准确地说,它是相应的标签。我需要将该标签分配给测试示例。我的测试集中的所有非重复项都应该由我的机器学习算法预测。

最佳答案

好的,我已经编辑了,看看这是否或多或少是您所需要的:

set_1 = [["yes", 1], ["maybe", 1], ["never", 0], ["nopes", 0], ["si", 1]]
set_2 = ["of course", "yes", "always", "never", "no way", "no"]

def predict_label(item):
return 2 # just to check which items got predicted

dset_1 = dict(set_1)

labeled_set_2 = [[item, dset_1.get(item, predict_label(item))] for item in set_2]
print labeled_set_2

这将按照您的要求保留 set_2 中的顺序。但请检查我对 set_1 和 set_2 结构的假设是否正确。

它将给出结果:

[['of course', 2], ['yes', 1], ['always', 2], ['never', 0], ['no way', 2], ['no', 2]]

此列表推导式创建一个由对组成的新列表(此处列出,但如果您愿意,也可以使用元组)。关键思想是从 set_1 中创建一个字典,因此您可以使用字典 get 方法来查找某个键是否存在。通过使用get,如果键不存在,则该值将默认为predict_label(item)返回的值。因此列表理解将遍历 set_2 中的所有项目,并检查它们是否作为字典中的键存在。如果这样做,则该对中的第二项将是该项的字典条目的值。如果为假,则通过predict_label(item)计算第二项。

此其他代码执行相同的操作,但在函数内使用 for 循环而不是列表理解:

set_1 = [["yes", 1], ["maybe", 1], ["never", 0], ["nopes", 0], ["si", 1]]
set_2 = ["of course", "yes", "always", "never", "no way", "no"]

def predict_label(item):
return 2 # just to check which items got predicted

def labeled_set(set1, set2):
dset_1 = dict(set1)
labeled_set_2 = []
for item in set2:
if item in dset_1.keys():
labeled_set_2.append([item, dset_1[item]])
else:
labeled_set_2.append([item, predict_label(item)])
return labeled_set_2

print labeled_set(set_1, set_2)

这给出了相同的结果。在本例中,我使用了 dset_1.keys(),因此无需使用 get 方法。

关于python - 如何查找数据集中的重复项并对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com