Как я могу объединить строки CSV, которые имеют одинаковое значение в первой ячейке?

Это файл: https://drive.google.com/file/d/0B5v-nJeoVouHc25wTGdqaDV1WW8/view?usp=sharing

Как видите, в первом столбце есть дубликаты, но если бы я соединил дублирующиеся строки, никакие данные не были бы переопределены в других столбцах. Есть ли способ объединить строки с повторяющимися значениями в первом столбце?

Например, поверните "1,A,A,," и "1,,,T,T" в "1,A,A,T,T".

1 ответ

Простой Python:

import csv

reader = csv.Reader(open('combined.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

Как работает это волшебство:

  • перебирать строки в файле CSV
  • для каждой записи мы проверяем, была ли запись с таким же индексом до
  • если мы видим этот индекс впервые, просто скопируйте значения строк
  • если это дубликат, присвойте значения строк пустым ячейкам.

Последний шаг сделан через or хитрость: None or value вернусь value, value or anything вернусь value, Так, result[idx][i] or v вернет существующее значение, если оно не пустое, или значение строки.

Чтобы вывести это без потери дублированных строк, нам нужно сохранить индекс, затем выполнить итерацию и вывести соответствующие result записей:

indices = []
for row in reader:
    # ...
    indices.append(idx)

writer = csv.writer(open('outfile.csv', 'w'))
for idx in indices:
    writer.writerow([idx] + result[idx])
Другие вопросы по тегам