2016-08-30 90 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 =',')'例如。你可以直接將'[: - 1]'寫入文件。雖然我不確定編碼。你能試一下嗎? – ayhan

回答

2

一種方式是保存除最後一個條目之外的數據,默認爲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()