2016-09-23 55 views
1

我已经写下了一个代码以将几个虚拟DataFrame附加到一个。追加后,预期的“DataFrame.shape”将是(9x3)。但我的代码产生了一些意想不到的输出(6x3)。我如何纠正我的代码的错误。如何将多个数据帧附加到一个

import pandas as pd 


a = [[1,2,4],[1,3,4],[2,3,4]] 
b = [[1,1,1],[1,6,4],[2,9,4]] 
c = [[1,3,4],[1,1,4],[2,0,4]] 
d = [[1,1,4],[1,3,4],[2,0,4]] 


df1 = pd.DataFrame(a,columns=["a","b","c"]) 
df2 = pd.DataFrame(b,columns=["a","b","c"]) 
df3 = pd.DataFrame(c,columns=["a","b","c"]) 

for df in (df1, df2, df3): 
    df = df.append(df, ignore_index=True) 
print df 

我不想用“pd.concat”,因为在这种情况下,我必须来存储所有的数据帧到内存和我的真实数据集包含着巨大的形状数据帧的百名。我只想要一个代码,可以一次打开一个CSV文件导入环与环的最新进展最终DF

感谢

+0

使用'concat':'DF = pd.concat([DF1,DF2,DF3],ignore_index = TRUE)'你也打算重用(df1,df2,df3)中循环迭代:df = df.append(df,ignore_index = True)'if df = pd.DataFrame()for d in(df1,df2, df3): df = df.append(d,ignore_index = True)'那么它应该工作 – EdChum

+0

@EdChum我已更新查询。 – jax

+0

我已经发布了演示如何使用'concat'的代码,并且还显示了代码为什么不起作用 – EdChum

回答

1

首先使用concat来连接一堆DFS它的速度更快:

In [308]: 
df = pd.concat([df1,df2,df3], ignore_index=True) 
df 

Out[308]: 
    a b c 
0 1 2 4 
1 1 3 4 
2 2 3 4 
3 1 1 1 
4 1 6 4 
5 2 9 4 
6 1 3 4 
7 1 1 4 
8 2 0 4 

其次你重用你的循环迭代这就是为什么它会覆盖它,如果你这样做,将工作:

In [307]: 
a = [[1,2,4],[1,3,4],[2,3,4]] 
b = [[1,1,1],[1,6,4],[2,9,4]] 
c = [[1,3,4],[1,1,4],[2,0,4]] 
d = [[1,1,4],[1,3,4],[2,0,4]] 
​ 
​ 
df1 = pd.DataFrame(a,columns=["a","b","c"]) 
df2 = pd.DataFrame(b,columns=["a","b","c"]) 
df3 = pd.DataFrame(c,columns=["a","b","c"]) 
​ 
df = pd.DataFrame() 
​ 
for d in (df1, df2, df3): 
    df = df.append(d, ignore_index=True) 
df 

Out[307]: 
    a b c 
0 1 2 4 
1 1 3 4 
2 2 3 4 
3 1 1 1 
4 1 6 4 
5 2 9 4 
6 1 3 4 
7 1 1 4 
8 2 0 4 

在这里,我改变了日Ë迭代为d,并宣布在循环外空df

df = pd.DataFrame() 
​ 
for d in (df1, df2, df3): 
    df = df.append(d, ignore_index=True) 
相关问题