2016-11-27 8 views
0

3 개의 데이터 프레임을 병합하려고합니다. df의 두 개는 '국가'를 사용하고 세 번째는 '국가 이름'을 사용합니다. 편집 * 이미지는 SciEn 및 에너지를위한 것입니다.3 개의 데이터 프레임을 팬더와 병합하는 동안 키 오류가 발생했습니다

ScimEn

energy

은 누군가가 내 키 오류 위치를 알아내는 데 도움이 수 있습니까? energy.csv 파일에서 '국가'와 관련이 있다는 것을 알고 있지만 왜 오류가 있는지 이해할 수 없습니다.

코드 :

import pandas as pd 
import numpy as np 
energy = pd.read_csv('Energy Indicators.csv') 
GDP = pd.read_csv('world_bank_new.csv') 
columns_to_keep = ['Country Name','Country Code','Indicator Name','Indicator Code', 
        '2006','2007','2008','2009','2010','2011','2012','2013','2014','2015'] 
GDP = GDP[columns_to_keep] 
SciEm = pd.read_csv('scimagojr-3.csv',encoding = "ISO-8859-1") 



res = pd.merge(SciEm,energy,how='inner',on='Country').merge(GDP,how='inner',left_on='Country',right_on='Country Name').set_index('Country Name') 
res.index.name = None 

return pd.DataFrame(res,columns=dfcolumns).head(15) 

오류 : 내가 코멘트에 제안 당신은 단지 수익이 점을 넣을 수 있습니다

KeyError         Traceback (most recent call last) 
/opt/conda/lib/python3.5/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance) 
    1944    try: 
-> 1945     return self._engine.get_loc(key) 
    1946    except KeyError: 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4154)() 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4018)() 

pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12368)() 

pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12322)() 

KeyError: 'Country' 
+1

첫 번째 병합의 출력을보십시오. 'res = pd.merge (SciEm, energy, how = 'inner', on = 'Country')'거기에 "국가"열이 있습니까? 아마도 그것은 병합 후에 "Country_x"와 "Country_y"로 변형되었을 것입니까? – DataSwede

+0

병합의 두 번째 부분을 제거하고 보유한 코드 만 남겨두면 코드가 작동하지 않습니다. 그래서 저는 에너지 파일에있는 국가가 이상한 일을하고 있다고 생각합니다. 그러나 나는 무엇을 알아 내지 못합니다. –

+0

근접 인쇄하기 :'print energy.columns'와'Print SciEm.columns' 둘 다의 열 이름을 출력하십시오. 때로는 열 이름 뒤에 공백 문자 또는 다른 대문자 또는 다른 쉽게 놓칠 수있는 뭔가가 있습니다. SciEm를 들어 – DataSwede

답변

0

:

return SciEm.merge(GDP, how='left', left_on='Country', right_on='Country Name').merge(energy, how='left', left_on='Country', right_on='Country').drop('Country Name', axis=1).set_index('Country').head(15) 
+0

이것은 작동하지 않습니다. 키 오류가 여전히 있습니다. –

+0

파일을 올바르게 읽지 않았습니까? 병합하는 파일의 인쇄 화면을 보낼 수 있습니까? – zipa

+0

이미지를 원본에 추가했습니다. –

0

오류가 원래했다. CSV 파일. 우연히 그것을 .txt로 저장했습니다.

그러나 이상한 것은 파일의 이미지가 .txt처럼 보이지 않는다는 것입니다. 여전히 .csv처럼 보입니다.