2017-08-06 51 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)