如何将多个数据框合并为一个

时间:2016-09-23 11:10:15

标签: python pandas

我已经写下了一个代码,将几个虚拟DataFrame附加到一个中。追加后,预期" DataFrame.shape"将是(9x3)。但是我的代码产生了意想不到的输出(6x3)。我怎样才能纠正我的代码错误。

@test_str("\\")

我不想使用" pd.concat"因为在这种情况下我必须将所有数据帧存储到内存中,而我的真实数据集包含数百个具有巨大形状的数据帧。我只想要一个可以一次打开一个CSV文件的代码,循环更新最后的DF,循环进度

谢谢

1 个答案:

答案 0 :(得分: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

其次你在你的循环中重复使用iterable,这就是为什么它会覆盖它,如果你这样做它会起作用:

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

在这里,我将iterable更改为d并在循环外声明为空df

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