【问题标题】:Using python csv - Merging rows based on column使用 python csv - 基于列合并行
【发布时间】:2020-03-10 15:30:58
【问题描述】:

当前表

想要的结果

目前没有得到任何结果。不知道从这里去哪里。

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)

【问题讨论】:

  • csv_dict[row[0]] += row:你不想那样做。您想将非空白值(第一行除外)添加到字典中

标签: python csv


【解决方案1】:

您尝试执行的操作不起作用,因为您每次都在添加整行

您想过滤掉空白并在一个键上累积值。

有 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 模块)。

【讨论】:

  • csv 模块也可以。熊猫很酷。一旦你有了字典,其余的都已经在这个网站上介绍了。
猜你喜欢
  • 2017-07-23
  • 2020-10-29
  • 2016-01-16
  • 2015-12-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多