2017-08-06 76 views
0

我有10個數據幀具有相同的行數,並且每個數據幀都有自己的一組唯一列(不在任何數據幀之間共享)。我想簡單地將數據幀串聯起來,使最終的數據幀包含所有數據幀中包含的所有列。最後一個數據幀的第一行將包含第一行的第一行,接着是第二行的第一行,依此類推,直到第十個數據幀。我試過pandas.concat(dataframes,axis = 1),但它最終以某種方式在我的數值數據中創建了NaN值。我通過編寫一個非常緩慢且醜陋的方法來解決這個問題,該方法通過索引增加行數並逐行創建最終數據框。什麼是正確的熊貓方式來做到這一點?連續高效地連接熊貓數據框

+0

這是因爲DataFrames的行數是不同的。你能告訴我DataFrames的形狀嗎? – Wonjin

+0

您需要將所有數據幀重新索引爲相同,然後調用'pd.merge'或'pd.concat'。 –

+0

@Winjin不,因爲我說他們都有相同的行數。 – YungGun

回答

1

假設所有dataframes在列表中df_list

df0_index = df_list[0].index # get the first data frame's index 

for i in range(1, len(df_list)): 
    df_list[i] = df_list[i].set_index(df0_index) # reindex all the other dataframes 

df_out = pd.concat(df_list, axis=1) # concatenate 
+1

我希望在8小時前知道這件事!我需要花時間來更好地理解索引。謝謝。 – YungGun

+0

嘿,對不起,我真的試過了,它不起作用。我仍然莫名其妙地獲得NaN值。這一點對我來說真是令人難以置信,我認爲問題在於熊貓,而不是我的代碼。 – YungGun

+0

@YungGun它是不幸的,你不接受...如果問題是與熊貓。無論如何,我會盡量創造一個例子。 –

1

得到它的工作。只需在調用pandas.concat()時將「ignore_index」設置爲true即可。

pd.concat(df_list, axis=1, ignore_index=True) # returns dataframes correctly. 

請注意,重建索引不會出於某種原因。

1

您可以用列表理解這樣做:

pd.concat([df.reset_index(drop=True) for df in df_list], axis = 1)