2013-07-15 2 views
1

저는 Python 패밀리를 처음 사용하여 며칠 동안 두 개의 Excel 파일을 병합하려고 노력했습니다. 나는 끝없이 합병을 연구하고 내 필요에 맞게 코드를 수정하려고했지만 작동하지 않았습니다. 왜 내가 코드가 작동하지 않는지에 대한 도움을 얻을 수 있는지 궁금해했다. 이것이 파이썬을 사용하는 다른 사람들에게 공통적 인 문제가 될 수 있다고 생각합니다. 그래서 다른 사람들에게도 도움이 될 것입니다. 나는 어떤 의견을 주셔서 감사합니다!ID별로 두 개의 Excel 파일을 Python 2.7을 사용하여 하나의 Excel 파일로 병합하고자합니다.

각 회사마다 고유 한 ID로 병합하려고하는 두 개의 Excel 파일 'Chinese Scores3.csv'와 'Chinese Scores4.csv'가 있습니다. 회사 ID 이외에 각 Excel 파일마다 일치하는 열이 없습니다. 또한 모든 회사가 두 파일에 모두 나열되어있는 것은 아닙니다. 일부는 둘 다 나열되지만 다른 것은 둘 중 하나에 나열됩니다. 회사 ID에 대한 모든 정보를 Excel 시트의 한 줄에 함께 첨부하고 싶습니다. 즉 첫 번째 Excel 파일 열은 ID, JanSales, FebSales 등이며 두 번째 Excel 파일 열은 ID, CreditScore, EMMAScore 등입니다. 만들려는 Excel 파일에는 ID, JanSales, FebSales, CreditScore, EMMAScore 열이 있습니다. 은 모두 회사 ID에 따라

이 의미가 있습니까? 그것은 Excel에서 VLOOKUP을 사용하는 것과 같지만, 파이썬을 사용하여 이것을하고 싶습니다. 어쨌든, 제 코드는 작동하지 않습니다. 나는 그것을 조작하려고 시도하지만 작동하지 않습니다. 나는 피드백을 받기를 희망한다! 우리가 코드를 수정할 수 있지만 대신 작품의 이런 종류의 일을 할 거라면

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 라이브러리로 보는 것이 좋습니다 것입니다. 그것은 삶을 훨씬 쉽게 만들어 주며 종종 사소한 경계선이됩니다. 예를 들어

, (우리가 원하는 경우 우리는 Excel 파일에서 바로 시작할 수도 있지만) 우리는 두 개의 CSV 파일이 있다면 :

>>> !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 (그들의 종류의 같은 생각이라는 객체로이 엑셀 시트) :

>>> 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