2016-07-20 5 views
1

forループ内の反復ごとに2列のデータを生成でき、それをcsvファイルに保存したい場合、2つの列を生成する次の反復が並んでいればどうなるでしょう同じCSVファイル(上書きしない)に?次の繰り返しにも同じことが起こります。私はpandas.DataFrame(mode='a')を検索しましたが、列を縦に(行で)追加するだけです。私はpd.concatを連結してみましたが、私はそれを2つ以上のforループでどのように実装するのか分かりませんdataframes。このコードのサンプルコードはありますか?または共有するいくつかのアイデア?python pandasの1つのcsvファイルに列のデータフレームを(反復ごとに)スタックする方法は?

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']) 
+0

IIUCすることができます 'pd.concat([DF1、DF2、DF3、...]、軸= 1)'。私はいくつかのサンプルデータセットと希望のデータセットであなたの質問を更新する必要があると思います。それはかなり明確ではないからです。 – MaxU

+0

i = 1、data = np.array([x、y])の質問を更新しました。次の反復では、8列のデータセットを1つのcsvファイルで作成する必要があります(上書きはしません)。反復ごとに2列のデータを単に水平に積み重ねます。どのようにこれを行うにはどのようなアイデアですか? – athrun

答えて

1

ファイルは長さが伸びる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) 
+0

ありがとうeafit ..私もこれを試しました..しかし、どのように水平に2列のデータフレーム(a)を連結することができます-loopのすべての反復を変更しますか? – athrun

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 
+0

ええ!ありがとう!すべての配列が値を変更するように、反復ごとに2列の配列を連結することはどのように可能ですか?反復ごとの '新しい'データフレームの値を変更し、配列の前の値に連結します。 – athrun

+0

@ripper、私は答えを更新しました - 確認してください – MaxU

+0

これは私がやったことです。 – piRSquared

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

+0

返信ありがとうございました。 'NameError:name 'iterstacking'が定義されていません。..連結される配列が単にrandint nx 2配列から生成されたのではなく、繰り返しごとにnx 2配列Aが生成されますnx2配列Bによって連結されるなど、どのようにnx2配列の新しいセットをforループに渡し、前の配列と連結することができますか?その後、1つのCSVファイルに保存します。 – athrun

関連する問題