基于第1列合并行的Python脚本

2024-05-15 10:09:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看到了很多关于这个的问题/答案,但没有一个我看到的解决了我的问题,所以任何帮助将不胜感激。你知道吗

我有一个非常大的CSV文件,其中有一些重复的列条目,但我想一个脚本来匹配和合并行的基础上,第一列。 (我不想用熊猫。我使用的是python2.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

但是这些对我没有帮助-我迷路了

任何帮助都会很好。你知道吗

谢谢


Tags: csvinforresultopenreaderfilerow
1条回答
网友
1楼 · 发布于 2024-05-15 10:09:25

尝试使用字典,第一列的值作为键。我会这样做:

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))

相关问题 更多 >