我已经看到很多问题/答案,但我看过的都没有解决我的问题,所以任何帮助都会受到赞赏。
我有一个非常大的CSV文件,它有一些重复的列条目,但我想要一个脚本来匹配和合并基于第一列的行。 (我不想使用pandas。我使用的是Python 2.7。文件中没有CSV标题)
这是输入:
2144, 2016, 505, 20005, 2007, PP, GPP, DAC, UNSW
8432, 2015, 505, 20005, 2041, LL, GLO, X2, UNSW
0055, 0.00, 0.00, 2014, 2017
2144, 0.00, 0.00, 2016, 959
8432, 22.9, 0.00, 2015, 2018
0055, 2014, 505, 20004, 2037, LL, GLO, X2, QAL
通缉输出:
2144, 0.00, 0.00, 2016, 959, 2016, 505, 20005, 2007, PP, GPP, DAC, UNSW
0055, 0.00, 0.00, 2014, 2017, 2014, 505, 20004, 2037, LL, GLO, X2, QAL
8432, 22.9, 0.00, 2015, 2018, 2015, 505, 20005, 2041, LL, GLO, X2, UNSW
我试过了:
reader = csv.reader(open('input.csv))
result = {}
for row in reader:
idx = row[0]
values = row[1:]
if idx in result:
result[idx] = [result[idx][i] or v for i, v in enumerate(values)]
else:
result[idx] = values
这将搜索重复项:
with open('1.csv','r') as in_file, open('2.csv','w') as out_file:
seen = set() # set for fast O(1) amortized lookup
for line in in_file:
if line in seen: continue
但这些并没有帮助我 - 我迷失了
任何帮助都会很棒。
由于
答案 0 :(得分:1)
尝试使用字典,第一列的值作为关键字。以下是我将如何做到这一点:
with open('myfile.csv') as csvfile:
reader = list(csv.reader(csvfile, skipinitialspace=True)) # remove the spaces after the commas
result = {} # or collections.OrderedDict() if the output order is important
for row in reader:
if row[0] in result:
result[row[0]].extend(row[1:]) # do not include the key again
else:
result[row[0]] = row
# result.values() returns your wanted output, for example :
for row in result.values():
print(', '.join(row))