2017-07-24 51 views
1

追加熊貓系列我有三個系列和列表:要使用循環

df1 = pd.Series(['a','b','c','d']) 
df2 = pd.Series(['e','f','g','h']) 
df3 = pd.Series(['i','j','k','l']) 


df1 
0 a 
1 b 
2 c 
3 d 
df2 
0 e 
1 f 
2 g 
3 h 

df3 
0 i 
1 j 
3 k 
4 l 

list = [df1,df2,df3] 

我想用循環這樣的追加系列:

df1 df2 df3 
0 a  e i 
1 b  f j 
2 c  g k 
3 d  h l 

我怎樣才能做到這一點?

我想這樣的,但失敗:

for i in dflist: 
    tempdata = pd.DataFrame([]) 
    mstdf = tempdata.append(i, ignore_index= True) 
    print(mstdf) 


    0 1 2 3 
0 a b c d 
    0 1 2 3 
0 e f g h 
    0 1 2 3 
0 i j k l 

我已經提到pandas.DataFrame.append文件和我也看了一些的協議棧的問題。但我無法解決這個問題。

蟒蛇 - 在pandas.DataFrame添加一行 - 堆棧溢出 蟒蛇 - 追加列表或一系列的熊貓數據幀作爲行... 蟒蛇 - 如何追加在大熊貓數據幀行的for循環...

回答

1

我會使用pd.concat,如果我能

pd.concat([df1, df2, df3], axis=1, keys=['df1', 'df2', 'df3']) 

    df1 df2 df3 
0 a e i 
1 b f j 
2 c g k 
3 d h l 

您也可以使用pd.concat與字典

pd.concat({'df1': df1, 'df2': df2, 'df3': df3}, axis=1) 

    df1 df2 df3 
0 a e i 
1 b f j 
2 c g k 
3 d h l 

但是如果你必須使用一個循環

df_agg = None 

for name, df in zip(['df1', 'df2', 'df3'], [df1, df2, df3]): 
    if df_agg is None: 
     df_agg = df.to_frame(name) 
    else: 
     df_agg[name] = df 

df_agg 

    df1 df2 df3 
0 a e i 
1 b f j 
2 c g k 
3 d h l 
+0

謝謝您的幫助。但我必須使用一個循環。因爲實際上,我必須處理一系列大型數據庫。我不太清楚如何在循環中使用concat。 – ukebida

+0

謝謝。我想我可以節省很多時間。但是有什麼方法可以使用熊貓的追加功能?我不能直觀地理解上面的代碼,因爲我不熟悉zip()等一些基本功能。 – ukebida

+0

@ukebida請熟悉'zip'!這是一個巨大的python,不應該被忽視。我使用它,因爲我需要一種機制來爲列提供名稱以及要添加的列。運行這個命令查看'zip'是否列出(zip(['df1','df2','df3'],[df1,df2,df3]))''。關於'append'。我認爲追加是錯誤的選擇。我可以強制使用'append'的答案,但效率很低。當你專門添加列時,append會添加行。使用的選項是'pd.concat',但是... – piRSquared