2017-03-09 24 views
0

私は6列のpandas dataFrameを扱っています。これらの列をファイルに書き出したいのですが、.txt形式が望ましいですが(dfを使用しています。 to_csvメソッドを使用し、.csv拡張子を使用しないので、テキストファイルのようです)。複雑なフォーマットの(csv)ファイルにpandas dfを書き込む

1 6 34 
    99 2 5 
    9 8 89 
    56 33 77 
    4 55 45 
    87 54 34 

たちは、行の最初の3つの最後の3つの値を見ることができるように:私は、ファイルには、このデータフレームを作成するとき が続い

 a b c d e f 
    0 1 6 34 99 2 5 
    1 9 8 89 56 33 77 
    2 4 55 45 87 54 34 

DFの例で、次は私が期待するものですdfのすべての行について、ファイル内の異なる行になければなりません。ヘッダーと索引なし。

以下は、ヘッダーとインデックスを削除するために使用した単純なコードですが、残りの基準をどのように達成するのかという手がかりはありません。私は数千の行を持つ巨大なデータフレームのため、出力ファイルを手動でフォーマットすることはできません。また、一度dfのデータを書いてしまえば、別のdf(構造も同じ)のデータを追加する必要があります。

with open('output', 'a+') as f: 
    df.to_csv(f, header = False, index = False, sep = " ") 

むしろ、私はタスクのための関数を定義するような別のアプローチに完全に移行する必要がありますか?

+1

この答えはあなたの問題のために役立つだろう。 http://stackoverflow.com/a/27514161/4399016 –

答えて

1

まず、フラットな列名を2レベルの階層名に変更します。新しい名前をタプルのリストとして準備し、リストから新しいインデックスを作成します。

new_columns = [(a,b) for b in (0,1) for a in df.columns[:len(df.columns)/2]] 
#[('a', 0), ('b', 0), ('c', 0), ('a', 1), ('b', 1), ('c', 1)] 
df.columns = pd.MultiIndex.from_tuples(new_columns) 
#df 
# a b c a b c 
# 0 0 0 1 1 1 
#0 1 6 34 99 2 5 
#1 9 8 89 56 33 77 
#2 4 55 45 87 54 34 

各列にはどのように2つの名前があり、最初の名前が繰り返されるかに注意してください。さて、データフレームをスタック:行名に二列名を変換します。

tall = df.stack() 
#  a b c 
#0 0 1 6 34 
# 1 99 2 5 
#1 0 9 8 89 
# 1 56 33 77 
#2 0 4 55 45 
# 1 87 54 34 

そして背の高いデータフレームは、ファイルに行く準備ができている:

tall.to_csv(filename, header=False, index=False, sep=' ') 
#1 6 34 
#99 2 5 
#9 8 89 
#56 33 77 
#4 55 45 
#87 54 34 
+0

OPがデータフレームを固定幅のファイルとして好むかどうかは、np.savetxt( 'output.txt'、tall.values、fmt = '%d ') '? – maxymoo

+0

こんにちは、私はコードuを試してみましたが、(スタッキングする前に)最初の部分を実行した後にTypeErrorを取得しています。正確なエラーは 'TypeError:このインデックスタイプで__truediv__を実行できません: Liza

+0

残念ながら、かっこを間違った場所に置いてください。 – DyZ

関連する問題