一种通过比较特定值从多维数组中删除重复项的方法

时间:2019-06-02 03:45:52

标签: python

我正在编写用于数据预处理的python脚本。所讨论的数据将作为多维数组读取并存储在脚本中,该多维数组由类似于以下数据点的数据点组成。

[['United', '-27.654379', '152.917741', 'e10', '1459', '2019-03-18'],
['United', '-27.654379', '152.917741', 'e10', '1449', '2019-03-19']]

当前,我也需要删除数组中具有相同日期的值,以便

[['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16'],
['United', '-25.607894', '150.367213', 'e10', '1297', '2019-03-16']]

将成为

[['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16']]

我目前这样做的方法(如下所示)似乎可以识别和删除具有重复日期的条目,但是在输出中仍然可以找到一些条目。

    for line in Data_text:
        for row in Data_text:
            if line[5] == row[5]:
                Data_text.remove(row)

深入了解我的算法中的错误和/或实现它的更好方法。

4 个答案:

答案 0 :(得分:1)

使用纯Python,在这种情况下,您可以利用set的力量来工作:

lst = [['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16'],
       ['Costco', '-27.213607', '152.996416', 'e10', '1297', '2019-03-16']]

seen = set()
print([x for x in lst if not (x[5] in seen or seen.add(x[5]))])

# [['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16']]

答案 1 :(得分:0)

使用python3.7,下面的代码即可正常工作。但是,它保留了最后一个。

data = [['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16'],
        ['United', '-25.607894', '150.367213', 'e10', '1297', '2019-03-16']]

data = list({item[5]: item for item in data}.values())
# [['United', '-25.607894', '150.367213', 'e10', '1297', '2019-03-16']]

答案 2 :(得分:0)

您可能需要考虑将熊猫用于此类数据和操作:

a = [['Costco', '-27.213607', '152.996416', 'e10', '1237', '2019-03-16'],
     ['United', '-25.607894', '150.367213', 'e10', '1297', '2019-03-16']]

import pandas as pd

df = pd.DataFrame(a).drop_duplicates(5, keep='first')

结果:

df

        0           1           2    3     4           5
0  Costco  -27.213607  152.996416  e10  1237  2019-03-16

如果日期具有不同的格式,这将特别有用:

a2 = [['Costco', '-27.213607', '152.996416', 'e10', '1237', 'March 16, 2019'],
    ['United', '-25.607894', '150.367213', 'e10', '1297', '2019-03-16']]

df = pd.DataFrame(a2)
df[5] = pd.to_datetime(df[5])
df.drop_duplicates(5, keep='first')

仍然给出正确的结果:

        0           1           2    3     4          5
0  Costco  -27.213607  152.996416  e10  1237 2019-03-16

答案 3 :(得分:0)

这行可能存在一些问题:Data_text.remove(row)Data_text的长度将减少1

请尝试此操作,新建一个result_list = [],将没有重复的记录放入result_list

result_list = []
length = len(Data_text);
for i in range(0, length):
    line = Data_text[i]
    is_exsit = False
    for row in result_list:
        if line[5] == row[5]:
            is_exsit = True
            break

    if is_exsit == False:
        result_list.append(line)


print(result_list)