2013-07-15 21 views
1

我是新來的Python家庭,並試圖解決合併兩個Excel文件的天。我研究了無休止的合併,並試圖調整我的代碼以適應我的需求,但它一直沒有工作。我想知道如果我能得到任何幫助,爲什麼我的代碼無法正常工作。我覺得這對使用Python的其他人來說可能是一個普遍問題,所以希望這可以幫助其他人。我很欣賞任何評論!尋找合併兩個Excel文件的ID到一個Excel文件使用Python 2.7

我有兩個excel文件,'Chinese Scores3.csv'和'Chinese Scores4.csv',我試圖通過一個ID合併,這對每個公司都是獨一無二的。除了公司ID之外,每個Excel文件都沒有匹配的列。此外,並非所有公司都在這兩個文件上列出。有些被列出,但其他列在其中。我希望將所有公司ID的信息連在一起放在Excel表格上。即第一個excel文件列是ID,JanSales,FebSales等,第二個excel文件列是ID,CreditScore,EMMAScore等。我想要創建的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:])) 

回答

2

雖然我們可以解決您的代碼,我強烈建議尋找到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") 
+0

DSM,暗示熊貓是一個好主意。它比我使用的方法更有意義。感謝您解決問題! – user2584342

相關問題