2016-09-28 5 views
2

팬더에서 내부 결합이 이상하게 작동하는 이유는 무엇입니까? 예를 들어팬더 DataFrame이 어떻게 작동하는지 설명하십시오

:

import pandas as pd 
import io 

t1 = ('key,col1\n' 
     '1,a\n' 
     '2,b\n' 
     '3,c\n' 
     '4,d') 

t2 = ('key,col2\n' 
     '1,e\n' 
     '2,f\n' 
     '3,g\n' 
     '4,h') 


df1 = pd.read_csv(io.StringIO(t1), header=0) 
df2 = pd.read_csv(io.StringIO(t2), header=0) 

print(df1) 
print() 
print(df2) 
print() 
print(df2.join(df1, on='key', how='inner', lsuffix='_l')) 

출력 :

key col1 
0 1 a 
1 2 b 
2 3 c 
3 4 d 

    key col2 
0 1 e 
1 2 f 
2 3 g 
3 4 h 

    key_l col2 key col1 
0  1 e 2 b 
1  2 f 3 c 
2  3 g 4 d 

내가 lsuffix를 지정하지 않으면, 그것이 말하는

ValueError: columns overlap but no suffix specified: Index(['key'], dtype='object') 

이 기능의 작업은 diff합니까 SQL의 JOIN과 다른가? 접미어가있는 '키'열을 추가로 만드는 이유는 무엇입니까? 3 행만있는 이유는 무엇입니까? 첫째

key col1 col2 
0 1 a e 
1 2 b f 
2 3 c g 
3 4 d h 

답변

1

우선 일 :
당신이 원하는 무엇을 index에 병합에

df1.merge(df2) 

enter image description here


join 기본값을 병합했다 나는 다음과 같은 결과물을 출력 할 것으로 예상 . on 매개 변수를 지정하여 왼쪽에서 어느 열이 오른쪽의 색인과 일치하는지 만 지정할 수 있습니다.

이 당신의 예는 0123의 key 열이 [0, 1, 2, 3]처럼 보이는 df2의 인덱스와 일치한다

df1.set_index('key').join(df2.set_index('key')) 

enter image description here

df1.join(df2.set_index('key'), on='key') 

enter image description here


설명 도움이 될 수 있습니다 보이는 942,715,384,당신이 col2NaN을받을 이유 key_l4

df1.join(df2, on='key', lsuffix='_l', how='outer') 

enter image description here

+0

감사 때의 [1, 2, 3, 4]
있다. 그렇다면 조인은 무엇입니까? – spiderface

+0

@spiderface는보다 포괄적 인 대답을 위해 노력하고있었습니다. 게시물이 업데이트되었습니다. – piRSquared

관련 문제