Слияние двух файлов CSV с помощью общего столбца Python

Я пытаюсь объединить два CSV-файла с общим столбцом идентификатора и записать слияние в новый файл. Я пробовал следующее, но это дает мне ошибку -

import csv
from collections import OrderedDict

filenames = "stops.csv", "stops2.csv"
data = OrderedDict()
fieldnames = []
for filename in filenames:
    with open(filename, "rb") as fp:  # python 2
        reader = csv.DictReader(fp)
        fieldnames.extend(reader.fieldnames)
        for row in reader:
            data.setdefault(row["stop_id"], {}).update(row)

fieldnames = list(OrderedDict.fromkeys(fieldnames))
with open("merged.csv", "wb") as fp:
    writer = csv.writer(fp)
    writer.writerow(fieldnames)
    for row in data.itervalues():
        writer.writerow([row.get(field, '') for field in fieldnames])

Оба файла имеют столбец "stop_id", но я получаю эту ошибку обратно - KeyError: 'stop_id'

Любая помощь приветствуется.

Спасибо

 Dinesh Pundkar29 июл. 2016 г., 19:50
@sgpbyrne - Пожалуйста, попробуйте использовать модуль Pandas для этого. Вы можете достичь выше всего с 4-5 линиями
 Alleo26 июл. 2016 г., 21:30
data.setdefault(row["stop_id"], {}).update(row) - почему так сложно?
 sgpbyrne26 июл. 2016 г., 21:32
В качестве входных данных я использовал другой пример переполнения стека. Можете ли вы предложить альтернативу? Спасибо
 Alleo26 июл. 2016 г., 21:32
Кроме того, объединение двух таблиц по столбцам выполняется сpandas.merge, посмотреть здесьpandas.pydata.org/pandas-docs/stable/...
 sgpbyrne26 июл. 2016 г., 21:33
отлично, спасибо за это Alleo

Ответы на вопрос(2)

Решение Вопроса

Спасибо, Шиджо.

Это то, что у меня сработало после - слилось по первому столбцу в каждом csv.

import csv
from collections import OrderedDict

with open('stops.csv', 'rb') as f:
    r = csv.reader(f)
    dict2 = {row[0]: row[1:] for row in r}

with open('stops2.csv', 'rb') as f:
    r = csv.reader(f)
    dict1 = OrderedDict((row[0], row[1:]) for row in r)

result = OrderedDict()
for d in (dict1, dict2):
    for key, value in d.iteritems():
         result.setdefault(key, []).extend(value)

with open('ab_combined.csv', 'wb') as f:
    w = csv.writer(f)
    for key, value in result.iteritems():
        w.writerow([key] + value)

Вот пример использования панд

import sys
from StringIO import StringIO
import pandas as pd

TESTDATA=StringIO("""DOB;First;Last
    2016-07-26;John;smith
    2016-07-27;Mathew;George
    2016-07-28;Aryan;Singh
    2016-07-29;Ella;Gayau
    """)

list1 = pd.read_csv(TESTDATA, sep=";")

TESTDATA=StringIO("""Date of Birth;Patient First Name;Patient Last Name
    2016-07-26;John;smith
    2016-07-27;Mathew;XXX
    2016-07-28;Aryan;Singh
    2016-07-20;Ella;Gayau
    """)


list2 = pd.read_csv(TESTDATA, sep=";")

print list2
print list1

common = pd.merge(list1, list2, how='left', left_on=['Last', 'First', 'DOB'], right_on=['Patient Last Name', 'Patient First Name', 'Date of Birth']).dropna()
print common

Ваш ответ на вопрос