2017-06-06 36 views
1

爲了解決這個問題,我有一個以下結構的數據框,我正在從csv文件讀取數據框。to_csv上的數據幀標題

A  B C  D E 
    LOCATION DATE DATE 1 1 
    LOCATION DATE DATE 1 1 
    LOCATION DATE DATE 1 1 
    LOCATION DATE DATE 1 1 

我在此CSV從文件中讀取TEMP.DAT使用以下:

dfinal = pd.read_csv("temp.dat", header=0) 

再下面是完成

os.remove("temp.dat") 
dfinal = dfinal.sort_values(by="B", ascending=True) 
f = open(t, "w") 
f.write(stuff) 
f.write(stuff) 
dfinal.to_csv(t, index=False) 
f.close() 

在上面的代碼的臨時文件被刪除,數據幀按升序排序,然後打開名稱分配爲t的新文件。然後寫入元數據的兩行 ,並將數據幀寫入文件並最終關閉,但是如上所述寫入數據幀會在列名稱上產生錯誤,如下所示。

正如我的文件目前爲:

stuff 
stuff 
21,342,231,0,2 #Column names are being replaced here with unknown numbers 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 

列名不正確打印爲2的「東西」行之後的第一行應該是從CSV TEMP.DAT但讀頭編寫f.write語句正在搞亂列。

我所需的輸出是:

stuff 
stuff 
A  B C  D E 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 
LOCATION DATE DATE 1 1 

我怎麼會去實現這一目標?

+0

都能跟得上,不解決它,這是什麼的功能「一」呢? – cd123

+0

是的,這有點複雜,請檢查答案。 – jezrael

回答

1

我想你需要mode='a'拿什麼在to_csv蟒蛇寫模式append

print (dfinal) 
      A  B  C D E 
0 LOCATION DATE1 DATE 1 1 
1 LOCATION DATE5 DATE 1 1 
2 LOCATION DATE DATE 1 1 
3 LOCATION DATE DATE 1 1 

t = "temp.dat" 
stuff = 'stuff\n' 
dfinal = dfinal.sort_values(by="B", ascending=True) 

#write metadata 
with open(t, "w") as f: 
    f.write(stuff) 
    f.write(stuff) 
#append df to existing file filled by metadata 
dfinal.to_csv(t, index=False, mode='a') 

#omit first 2 metadata rows 
df = pd.read_csv(t, header=2) 
print (df) 
      A  B  C D E 
0 LOCATION DATE DATE 1 1 
1 LOCATION DATE DATE 1 1 
2 LOCATION DATE1 DATE 1 1 
3 LOCATION DATE5 DATE 1 1 
+0

是的,很好地解決它謝謝你。還有一個問題,with block的功能是什麼? – cd123

+0

這是用'with'處理文件的通用解決方案,然後關閉文件功能得到正確處理。並沒有必要稱之爲。但你的解決方案也適用。 – jezrael