2016-08-30 26 views
2

csvにデータを保存する場合、data.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False)は、csvファイルの最後に空白行を作成します。csvファイルの末尾に空白行の書き込みを停止する方法 - pandas

どうやってそれを避けますか?

これはline_terminatorと関係があり、デフォルト値はnで、改行しています。

最後に空白行を作成しないようにline_terminatorを指定する方法はありますか、またはcsvファイルを読み込んで空白行を削除して保存する必要がありますか?

パンダに精通していません。あなたの助けに感謝します、ありがとうございます!

+1

最後に入力された行の最後に改行があることはかなり標準的です。なぜこれが問題なの? –

+0

csvファイルは別のスクリプトで使用され、空白行や余分なスペースは使用できません。スクリプトは中断します。私はそれらのスクリプトへのアクセス権がありません。現在、私はデータをコピーし、vimに貼り付けて、毎回最後の行を削除しています。私は可能な限りそれを自動化したいと思います。 – medev21

+2

ファイル名に 'None'を渡すと、pandasは文字列オブジェクトを返します。 's = data.to_csv(None、sep = '、')'などです。 's [: - 1]'をファイルに直接書くことができます。私はエンコーディングについてはわかりません。あなたは試みることができますか? – ayhan

答えて

2

最後のエントリ以外のデータを保存する方法の1つは、デフォルトのline_terminator\n)で、最後の行にはline_terminator=""を追加します。

data1 = data.iloc[0:len(data)-1] 
data2 = data.iloc[[len(data)-1]] 
data1.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False) 
data2.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False,mode='a',line_terminator="") 
2

何らかの理由で、私が試したときに回線終端記号が機能しませんでした。 (それはline_terminatorが認識されないキーワード引数であると言って、エラーを与えた。)

しかし、これはトリックを行います:

より効率的な方法は、最初にファイルを開いて、そのストリームに書き込むことです
df.to_csv(path) 
    with open(path) as f: 
     lines = f.readlines() 
     last = len(lines) - 1 
     lines[last] = lines[last].replace('\r','').replace('\n','') 
    with open(path, 'w') as wr: 
     wr.writelines(lines) 
+0

このエラーを解決するには、data.iloc [-1 :, 0:-1] .to_csv(index = False、sep = '、'、header = False、mode = 'a'、line_terminator = "" ) – pkgajulapalli

0

、最後の改行を削除してください:

import os 
with open('csv_data', 'wb') as dst: 
    data.to_csv(wb, sep=',', encoding='utf-8', header= False, index = False) 
    dst.seek(-1, os.SEEK_END) # <---- 1 : len('\n') 
    dst.truncate() 
関連する問題