Нужно объединить два файла Excel по идентификатору в один файл Excel, используя Python 2.7

Я новичок в семействе Python и уже несколько дней пытаюсь решить проблему слияния двух файлов Excel. Я бесконечно исследовал слияние и пытался адаптировать свой код под свои нужды, но он не работал. Мне было интересно, могу ли я получить какую-либо помощь, почему мой код не работает. Я чувствую, что это может быть общей проблемой для других, использующих Python, так что, надеюсь, это поможет и другим. Я ценю любые комментарии!

У меня есть два файла Excel, "Китайский Scores3.csv" и "Китайский Scores4.csv", которые я пытаюсь объединить по идентификатору, который уникален для каждой компании. Кроме идентификатора компании, нет соответствующих столбцов для каждого файла Excel. Кроме того, не все компании перечислены в обоих файлах. Некоторые из них перечислены в обоих, но другие перечислены в одном или другом. Я хотел бы приложить всю информацию для идентификатора компании вместе в одну строку на листе Excel. первые столбцы файла Excel - это ID, JanSales, FebSales и т. д., а вторые столбцы файла Excel - это ID, CreditScore, EMMAScore и т. д. В файле Excel, который я хотел бы создать, есть столбцы: ID, JanSales, FebSales, CreditScore, EMMAScore. все в соответствии с идентификатором компании.

Это имеет смысл? Это похоже на использование VLOOKUP в Excel, но я хотел бы сделать это с помощью Python. Во всяком случае, вот мое кодирование, которое не работает. Я пытаюсь манипулировать этим, но это не работает. Я надеюсь получить обратную связь!

import sys
import csv

def main(arg):
    headers= []

    for arg in 'Chinese Scores3.csv':
        with open(arg) as f:
            curr = 'Chinese Scores3.csv'.reader(f).next()
            headers.append(curr)
            try:
                keys=list( set(keys) & set (curr))
            except NameError:
                keys = curr


    header = list(keys)
    for h in headers:
        header += [ k for k in h if k not in keys ]

    data = {}
    for arg in 'Chinese Scores4.csv':
        with open(arg) as f:
            reader = 'Chinese Scores4.csv'.DictReader(f)
            for line in reader:
                data_key = tuple([ line[k] for k in keys ])
                if not data_key in data: data[data_key] = {}
                for k in header:
                    try:
                        data[data_key][k] = line[k]
                    except KeyError:
                        pass

    for key in data.keys():
        for col in header:
            if key in data and not col in data[key]:
                del( data[key] )

    print ','.join(header)
    for key in sorted(data):
        row = [ data[key][col] for col in header ]
        print ','.join(row)

if __name__ == '__main__':
    sys.exit( main( sys.argv[1:]) )

1 ответ

Хотя мы могли бы исправить ваш код, я настоятельно рекомендую заглянуть в библиотеку pandas, если вы собираетесь вместо этого выполнять такую ​​работу. Это делает жизнь намного легче, и часто пограничной тривиальной.

Например, если бы у нас было два файла CSV (хотя мы могли бы начать прямо из файлов Excel, если бы захотели):

>>> !cat scores3.csv
ID,JanSales,FebSales
1,100,200
2,200,500
3,300,400
>>> !cat scores4.csv
ID,CreditScore,EMMAScore
2,good,Watson
3,okay,Thompson
4,not-so-good,NA

Мы могли бы прочитать их в объекты, называемые DataFrames (думать о них вроде листов Excel):

>>> import pandas as pd
>>> s3 = pd.read_csv("scores3.csv")
>>> s4 = pd.read_csv("scores4.csv")
>>> s3
   ID  JanSales  FebSales
0   1       100       200
1   2       200       500
2   3       300       400
>>> s4
   ID  CreditScore EMMAScore
0   2         good    Watson
1   3         okay  Thompson
2   4  not-so-good       NaN

И тогда мы можем объединить их в столбце ID:

>>> merged = s3.merge(s4, on="ID", how="outer")
>>> merged
   ID  JanSales  FebSales  CreditScore EMMAScore
0   1       100       200          NaN       NaN
1   2       200       500         good    Watson
2   3       300       400         okay  Thompson
3   4       NaN       NaN  not-so-good       NaN

После чего мы можем сохранить его в CSV-файл или в файл Excel:

>>> merged.to_csv("merged.csv")
>>> merged.to_excel("merged.xlsx")
Другие вопросы по тегам