2015-01-12 3 views
2

Pandas 0.14.1을 사용하여 동일한 행 인덱스로 두 개의 데이터 프레임을 외부 조인하려고합니다.Pandas join()이 작동하지만 concat()가 실패합니다.

모양은 456,1이고 df2139,5입니다. df2에있는 키의 대부분

df1에 있습니다

[in] print len(list(set(df2.index)-set(df1.index))) 
[out] 16 

join 작품 :

[in] df3=df1.join(df2,how='outer') 
[in] df3.shape 
[out] 473,6 

concat 실패 :

[in] df3=pd.concat([df1,df2],axis=1,join='outer') 
[out] ValueError: Shape of passed values is (6, 473), indices imply (6, 472) 

은 무엇이 발생할 수 있습니까?

+0

는 "DF1의 모양은 456,1이며, DF2은 139,5은" 는 1456과 5139을 의미합니까? – Alex

+0

아니요 : 456 및 139 행 사실, 오류 메시지는 변환 된 모양을보고하기 때문에 혼란 스럽습니다. – lmart999

+0

가능한 원인 : 데이터 프레임 중 하나에 중복 색인 값이 있습니다. 성공적인 '합류'에서 하류 발견. 이로 인해 'concat'이 실패 할 수 있지만, 발생한 오류는 명확하지 않습니다. – lmart999

답변

3

인덱스 중 하나에 중복 값이 ​​있으면이 오류가 발생할 수 있습니다. 예를 들어,

import pandas as pd 
df1 = pd.DataFrame(np.random.random((5,1)), index=list('AACDE'), 
        columns=['foo']) 
df2 = pd.DataFrame(np.random.random((4,1)), index=list('CDEF'), 
        columns=['bar']) 

In [50]: df1.join(df2, how='outer') 
Out[50]: 
     foo  bar 
A 0.846814  NaN 
A 0.638571  NaN 
C 0.516051 0.573165 
D 0.789398 0.095466 
E 0.921592 0.970619 
F  NaN 0.061434 

하지만

In [51]: pd.concat([df1,df2], axis=1, join='outer') 
ValueError: Shape of passed values is (2, 6), indices imply (2, 5) 
+0

예, 정확히 : 데이터 프레임 중 하나의 색인에 중복 값이 ​​있음을 발견했습니다 (다운 스트림 오류로 인해). 응답을 감사하십시오. – lmart999

관련 문제