2012-11-08 156 views
1

我有一個Python循環順序導入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