如何在python pandas中的一个csv文件中并排堆叠(每次迭代)数据帧?

时间:2016-07-20 01:58:44

标签: python pandas

如果我可以在for循环中每次迭代生成两列数据,并且我想将它保存在csv文件中,那么如果我将生成两列的下一次迭代它将如何堆叠旁边将如何完成在同一个csv文件上(没有覆盖)?同样适用于下一次迭代。我搜索了pandas.DataFrame(mode='a'),但它只是垂直地(按行)附加列。我已经考虑了连接pd.concat,但是,我不知道如何在一个for循环中实现它超过两个dataframes。你有这个样品代码吗?还是要分享一些想法?

import numpy as np, pandas as pd
for i in xrange (0, 4):
    x = pd.DataFrame(np.arange(10).reshape((5,1)))
    y = pd.DataFrame(np.arange(10).reshape((5,1)))

    data = np.array([x,y])
    df = pd.DataFrame(data.T, columns=['X','Y'])

3 个答案:

答案 0 :(得分:1)

文件是仅在长度上增长的一维对象。行只用\ n字符分隔。因此,在不重写文件的情况下添加行是不可能的。

您可以将文件加载到内存中并使用数据框连接,然后将其写回(某些其他文件)。这里:

import numpy as np, pandas as pd
a = pd.DataFrame(np.arange(10).reshape((5,2)))

b = pd.DataFrame(np.arange(20).reshape((5,4)))

pd.concat([a,b],axis=1)

答案 1 :(得分:1)

是你想要的吗?

In [84]: %paste
df = pd.DataFrame(np.arange(10).reshape((5,2)))

for i in range (0, 4):
    new = pd.DataFrame(np.random.randint(0, 100, (5,2)))
    df = pd.concat([df, new], axis=1)
## -- End pasted text --

In [85]: df
Out[85]:
   0  1   0   1   0   1   0   1   0   1
0  0  1  50  82  24  53  84  65  59  48
1  2  3  26  37  83  28  86  59  38  33
2  4  5  12  25  19  39   1  36  26   9
3  6  7  35  17  46  27  53   5  97  52
4  8  9  45  17   3  85  55   7  94  97

答案 2 :(得分:0)

替代方案:

def iter_stack(n, shape):
    df = pd.DataFrame(np.random.choice(range(10), shape)).T
    for _ in range(n-1):
        df = df.append(pd.DataFrame(np.random.choice(range(10), shape)).T)
    return df.T

iterstacking(5, (5, 2))

enter image description here