使用python csv-根据列合并行

时间:2019-11-14 15:49:27

标签: python csv

当前表

enter image description here

所需结果

enter image description here

目前无法获得任何结果。不知道从这里去哪里。

import csv
csv_dict = {}
with open("Test.csv", "r") as source:
    reader = csv.reader(source)
    header = next(reader)
    for row in reader:
        if row[0] in csv_dict:
            csv_dict[row[0]] += row
        else:
            csv_dict[row[0]] = row
        print (row)

1 个答案:

答案 0 :(得分:2)

您尝试执行的操作无效,因为您每次都添加整行

您要过滤出空白并在一键上累积值。

有2种方法(有2种不同的结果):

1)标准累积,不考虑位置

import csv,collections
csv_dict = collections.defaultdict(list)

with open("test.csv", "r") as source:
    reader = csv.reader(source)
    header = next(reader)
    for key,*rest in reader:
        csv_dict[key] += filter(None,rest)

print(csv_dict)

您将获得此字典:{'b': ['2', '4'], 'a': ['1', '2', '3', '4']}

2)累加,但位置与非空白值的原始位置匹配

在这种情况下,如果索引不适合,则必须增加列表大小。

import collections,csv

csv_dict = collections.defaultdict(list)

with open("test.csv", "r") as source:
    reader = csv.reader(source)
    header = next(reader)
    for key,*rest in reader:
        for i,r in enumerate(rest):
            if r:
                d = csv_dict[key]
                while i>=len(d):
                    d.append("")
                d[i] = r

print(csv_dict)

产生:

{'a': ['1', '2', '3', '4'], 'b': ['', '2', '', '4']}

在两种情况下,there are several solutions都会将此字典写入到生成的csv文件中(使用csv.DictWritercsv.writerpandas模块)。