2012-11-08 6 views
1

파이썬에서 순차적으로 CSV 파일을 가져 와서 임시 DataFrame 객체에 할당 한 다음 '마스터'DataFrame에 병합/병합을 시도하는 루프가 있습니다. 코드는 다음과 같습니다 : 팬더 병합 매개 변수

for csv_path in csv_paths: 
    df = pd.read_csv(''+csv_path+'') 
    df = df.set_index('Player') 
    if len(MLS_Stats) == 0: 
     MLS_Stats = pd.concat([MLS_Stats,df]) 
    else: 
     MLS_Stats = pd.merge(MLS_Stats, df, how="outer",left_index=True,right_index=True) 

MLS_Stats DF

난 당신이 빈 DF와 DF를 병합 할 수 있다고 생각하지 않기 때문에의 경우 루프의 추론이다, 처음에는 비어 있습니다.

각 병합마다 새로운 고유 인덱스 행과 새 열을 포함하지만 겹치는 열은 제외시킴으로써 DataFrame을 구축해야합니다. 위의 코드에는 현재 _x 및 _y 접미사가있는 겹치는 열이 포함되어 있습니다.

나는 이것이 드문 상황처럼 보이지 않기 때문에 내가 이해하지 못하는 것이 있어야 함을 알고 있습니다.

+0

을 받고 있어요? 또는 당신이 겪고있는 문제입니까? –

+0

겹치는 열을 포함하고 있습니다 ... 지금 comnbine_first 메서드가 필요한지 궁금합니다. – ChrisArmstrong

+0

'df_list = [df1, df2, df3]'의 데이터 프레임리스트를 만들고, MLS_Stats = pd.concat (df_list)와 동시에 이들을 모두 연결해야하는 이유는 무엇입니까? – Aman

답변

0

중복 행을 drop_duplicates으로 필터링하고 아직 존재하지 않는 열만 참여하도록 선택할 수 있습니다. 에서

import pandas as pd 
from StringIO import StringIO 

data0 = """\ 
index,A,B 
a,1,2 
a,1,2 
b,3,4 
c,5,6 
""" 

data1 = """\ 
index,A,C 
a,7,8 
d,9,10 
""" 

df = pd.DataFrame() 
columns = [] 
for data in [data0, data1]: 
    frame= pd.read_csv(StringIO(data), index_col=0).drop_duplicates() 
    frame = frame.ix[:, frame.columns - columns] 
    if len(frame): 
     df = df.join(frame, how='outer') if len(df) else frame 

print df 

결과 : 오류가 무엇을

 A B C 
index 
a  1 2 8 
b  3 4 NaN 
c  5 6 NaN 
d  NaN NaN 10 
+0

위의 코드에서 작동하는 것처럼 보이지만 결국 'combine_first'메서드를 사용하여 원하는 결과를 얻었습니다. – ChrisArmstrong