2016-11-11 11 views
3

csvに追加するとき、私の最初の行は新しい行ではなく既存の最後の行から始まります。pythonを使用してcsvに追加するときに新しい行を強制する方法pandas .to_csv

私はそれを探し続けますが、私はちょうど追加モードでcsvを開くか、csvに書き込むときに追加モードを使うという基本的な使い方を見ています。 f.write("/n")で( "/ n")を書き込む前に既存のファイルを開く必要があるように思われるので、ここで受け入れられた答え(to_csv append mode is not appending to next new line)を理解できませんでした。この回答(How to add pandas data to an existing csv file?)は最も関連性がありますが、関数に複数のデータフレームを書き込むことを望んでいますので、それらを開いたままにしたくありません。

a b c d   
5 1 ah doo   
6 2 bah poo   
7 2 dah coo 

私は私の機能や、この単純なコードを使用:構造とfoo.csvで、

import os 
def mysave(df,dfpath): 
    # if file does not exist write header 
    if not os.path.isfile(dfpath): 
     df.to_csv(dfpath, index = False) 
    else: # else it exists so append without writing the header 
     df.to_csv(dfpath, mode = 'a', index = False, header = False) 

mysave(mydf, 'foo.csv') 

私は非常に簡単な例を作成しました:私の計画のような機能を使用することです:

import pandas as pd 
df = pd.read_csv('foo.csv', index_col=False) 
mydf = df 
mydf.to_csv('foo.csv', mode='a', index = False, header = False) 

これはfoo.csvのように終わるものです:

a b c d   
5 1 ah doo   
6 2 bah poo   
7 2 dah coo5 1 ah doo 
6 2 bah poo   
7 2 dah coo  

mydf.to_csv('foo.csv', mode='a', index = False, header = ("/n")) のような改行文字をヘッダとして追加しようとすると、間違ったヘッダコメントがpandas(正しく)によって無視され、デフォルトのheader = Trueになります。

a b c d   
5 1 ah doo   
6 2 bah poo   
7 2 dah cooa b c d 
6 2 bah poo   
7 2 dah coo 

答えて

1

私はあなたが、単一のデータフレームに2つのデータフレームの他、以下のいずれかを追加しようとしていると仮定しています。以下

使用は、あなたのデータフレームは、巨大な取得し、あなたが行くことができる連結を避けたいなら、あなたは.CSVファイル

+0

この勧告は私の質問には答えません。私は現在、あなたの提案をしています。私はデータフレーム(グループごとに多数のデータフレーム)を繰り返し作成し、それをすべて.csv(グループ別)に送信します。 'mygroupsでMYGROUP用: D = pd.DataFrame()kの 、MYGROUPでV: もしK == X: #do何かTEMP = makeMyDF(V) D = pd.concat([D、 temp]) d.to_csv(filepath) 'しかし、現在のプロセスには11時間かかります。私は思い出のように多くを保持しないようにしたいと考えていました。 – jessi

+0

データフレームが大きい場合、ディスクに書き込むとウィンドウ時間が長くなります。これらの "ディスク書き込みウィンドウ時間"の間に、マルチプロセッシング(スレッディング)を使用して他の処理を行うことができます。ハードウェア、プロセッサーに依存します。 –

0

に出力を行うことができ、単一のコマンドとして

ans = pd.concat([df, df])

それを作るためにコマンドを述べました関数内またはコード内のスニペットとして、

import csv 
with open('foo.csv','ab') as out: 
    writer=csv.writer(out) 
    writer.writerow(()) 

と表示されます。もしあなたがWindowsにいないのであれば、「b」を開いてファイルを開くのを避けることができるかもしれません。(添付)

+0

だから、この勧告は私の質問に答えることはできませんが、私の実際の問題の代わりです。私は最初に(ループで)作成した後に.csvを開いてから、開いているCSVに一時データフレームを送信すれば、私が提案した方法を再構想することができると思います。しかし、Pythonでデータフレームを構築し、csvに「すべて」を一度だけ送信するよりも速くなるでしょうか? – jessi

+0

小規模なデータフレームを処理する場合、このIMOはリファクタリングやテストの時間がありませんが、連結プロセスが高価な状況においていると、速くなると思います。あなたがそれをテストする時間を見つけるなら、私に知らせてください。 – themistoklik

+0

私は本当に小さなデータフレームを持っていません。私はこの追加の仕方を理解した後にテストをする予定です。データフレームの最初の行をずらすことはありません。現在、私のプロセスは25グループで11時間かかります。確かに、この時間のほとんどは、Excelツール(私の作品ではない)への入力を繰り返し変更するにつれて、xlwingsにありますが、その中のいくつかはメモリ内のデータフレームを保持していると思います。 – jessi

関連する問題