我正在编写用于数据预处理的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)
深入了解我的算法中的错误和/或实现它的更好方法。
答案 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)