试图用Python 2.7将两个Excel文件合并成一个Excel文件

我是Python家族的新手,一直试图解决合并两个Excel文件的日子。 我研究了无休止的合并,并试图使我的代码适应我的需要,但它一直没有工作。 我想知道如果我能得到任何帮助,为什么我的代码不工作。 我觉得这对使用Python的人来说可能是一个普遍的问题,所以希望这也能帮助其他人。 我感谢任何意见!

我有两个excel文件,“Chinese Scores3.csv”和“Chinese Scores4.csv”,我试图通过一个ID来合并,这对每个公司都是独一无二的。 除了公司ID之外,每个Excel文件都没有匹配的列。 另外,并非所有公司都在这两个文件上列出。 有的被列出,有的被列在其中。 我想把一个公司ID的所有信息连在一起放在excel表单上。 即第一个Excel文件列是ID,JanSales,FebSales等,第二个Excel文件列是ID,CreditScore,EMMAScore等。我想要创build的Excel文件有列:ID,JanSales,FebSales,CreditScore,EMMAScore全部根据公司ID。

这是有道理的吗? 这就像在Excel中使用VLOOKUP,但我想用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:]) ) 

虽然我们可以修复你的代码,但如果你打算做这种工作的话,我强烈推荐你去看pandas库。 它使生活变得更容易,并且经常是边界微不足道的。

例如,如果我们有两个csv文件(尽pipe如果我们想的话,我们可以从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")