列表中的Concat多个数据框

时间:2019-05-17 10:58:54

标签: python pandas list append

我在使用np.array_split之后获得一个列表中的几个数据帧,我想将其中的一些合并为一个数据帧。在此示例中,我要合并b中包含的3个数据帧(除了第二个以外的所有数据帧,这是列表中的元素b [1]):

df = pd.DataFrame({'country':['a','b','c','d'],
  'gdp':[1,2,3,4],
  'iso':['x','y','z','w']})

a = np.array_split(df,4)
i = 1
b = a[:i]+a[i+1:]

desired_final_df = pd.DataFrame({'country':['a','c','d'],
  'gdp':[1,3,4],
  'iso':['x','z','w']})

我试图创建一个空的df,然后通过循环对b中的元素使用append,但是没有完全成功:

CV = pd.DataFrame()
CV = [CV.append[(b[i])] for i in b] #try1
CV = [CV.append(b[i]) for i in b] #try2
CV = pd.DataFrame([CV.append[(b[i])] for i in b]) #try3

for i in b:
 CV.append(b) #try4

我已经找到了一个可行的解决方案,但是效率不高:

CV = pd.DataFrame()
CV = [CV.append(b) for i in b][0]

在这种情况下,我将所有行的相同数据帧的CV值提高了三倍,而我只是获得了第一行。但是,在我有大量数据集的真实情况下,拥有三倍的数据集将导致更多的计算时间。

我该如何做而不重复操作?

2 个答案:

答案 0 :(得分:1)

根据the docsDataFrame.append不能像列表一样就地工作。而是返回结果DataFrame对象。捕获该对象应该足以满足您的需求:

df = pd.DataFrame()
for next_df in list_of_dfs:
    df = df.append(next_df)

您可能希望在ignore_index=True调用中使用关键字参数append,以使索引变得连续,而不是为每个附加的DataFrame从0开始(假设列出所有从0开始的内容。

答案 1 :(得分:1)

要连接多个DF,重置索引,请使用pandas.concat

pd.concat(b, ignore_index=True)

输出

    country gdp iso
0   a   1   x
1   c   3   z
2   d   4   w
相关问题