删除二维数组 Python 的重复项

Posted

技术标签:

【中文标题】删除二维数组 Python 的重复项【英文标题】:Remove duplicates for 2d array Python 【发布时间】:2017-05-07 01:22:57 【问题描述】:

我有一个二维数组。当我向数组添加更多值时,一些值是重复的。我怎样才能删除这些?我的 aray,名为 a: 看起来像这样:

[[u'82', <a href="/12222/">Button</a>], [u'67', <a href="/12333/">Button</a>], [u'23', <a href="/12344/">Button</a>], [u'19', <a href="/12345/">Button</a>], [u'23', <a href="/12344/">Button</a>]]

我试过了

import numpy as np
def unique(a):
    order = np.lexsort(a.T)
    a = a[order]
    diff = np.diff(a, axis=0)
    ui = np.ones(len(a), 'bool')
    ui[1:] = (diff != 0).any(axis=1) 
    return a[ui]

[list(t) for t in set(tuple(element) for element in a)]

from pandas import *
import numpy as np
a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]])
DataFrame(a).drop_duplicates().values

但它们都不起作用。如何从二维数组中删除重复项?

【问题讨论】:

我在你的a 中没有看到重复,drop_duplicates(subset='a') 应该可以工作 @EdChum,是的,但是必须先创建数据框,然后才能将其作为子集引用。 OP 试图一步完成这一切,这就是它失败的原因。 【参考方案1】:

问题是您试图一步完成所有事情。你需要打破它(EdChum 几乎就在那里)

df = pd.DataFrame(data=a)
df = df.drop_duplicates(subset=a)

根据 EdChum 的评论,除非已创建数据框 (df),否则这将不起作用,否则我们无法将其作为子集引用。

【讨论】:

链接调用应该可以工作,将调用作为单独的函数调用与链接它们之间没有语义差异 好的,我的立场是正确的。我想我正在考虑将“a”作为子集的引用。但是,我只是按照 OP 的建议尝试了链式调用(不引用子集),并且没有问题。 现在我的代码是: import pandas as pd import numpy as np a = np.array(list) #DataFrame(a).drop_duplicates().values df = pd.DataFrame(data=a) df = df.drop_duplicates(subset=a) 我得到这个错误:回溯(最近一次调用最后):文件“scrapefolk.py”,第 114 行,在 df = df.drop_duplicates(subset=a) File "/Library /Python/2.7/site-packages/pandas/util/decorators.py”,第 91 行,在包装器中返回 func(*args, **kwargs) 文件“/Library/Python/2.7/site-packages/pandas/core/ frame.py”,第 3138 行,在 drop_duplicates duplicated = self.duplicated(subset, keep=keep) 我得到了这个错误: Traceback(最近一次调用最后一次):文件“scrapefolk.py”,第 114 行,在 df = df.drop_duplicates(subset=a)...@tnknepp

以上是关于删除二维数组 Python 的重复项的主要内容,如果未能解决你的问题,请参考以下文章

php中一维或多维数组去除重复项

如何从node.js中的二维数组中获取随机项[重复]

js中二维数组数组项去重

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

python中的两个二维数组,如何让这两个二维数组在不使用循环的情况下对应项进行加减乘除运算呢?

Python通过numpy中的二维数组枚举[重复]