2016-09-23 29 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) 
相關問題