2015-05-22 39 views
1

我在Win 7 64bit上使用Python 2.7.7和Pandas。 我的輸入數據最初是作爲空間分隔,右對齊。 我現在有數據作爲一個熊貓數據表格,我輸出爲csv。 我想寫一個空格刪除右對齊的文本文件。 這些列有字符串,整數和浮點數。 我試圖格式化使用此列中的一種:python pandas dataframe to csv導出格式化文本文件,每列有獨特格式

df_fg['Mem']=df_fg['Mem'].map('{:5d}'.format) 

這讓我每列單獨的格式,這是偉大的。

問題是,當我使用這種類型的格式時,我無法輸出空格分隔的文件。 這裏有各種方式我試着寫文本文件:

df_fg.to_csv('t.txt',index = False) 

不出意外這將產生格式化成具有填充空間csv文件。

所以,我認爲下一個合乎邏輯的步驟是試圖包含「sep」來擺脫逗號。

df_fg.to_csv('t.txt',index = False,sep= ' ') 

這將產生在文本文件格式的文本,但在每列中的每個元素用雙引號括起來。所以我得到的,看起來像

" 1" 
" 1" 

我嘗試了「引用」和 .to_csv的「雙引號」選項的各種組合列。什麼都沒有我最終使用雙引號內的格式化文本或csv文件中的格式化文本。我不能在文本文件中獲得格式化文本。

也許,我不應該使用「地圖」和「格式」? 任何有關如何編寫右對齊空格的建議都會非常感謝,它們將從dataform或csv中刪除字符串,整數和浮點數。

我試圖寫數據幀到一個字符串。我格式化使用命令中的數據幀的每一列如 df_g [ '紀念品'] = df_g [ '紀念品']圖( '{:4D}' 格式)。

df_g['Date1']=df_g['Date1'].map('{:12s}'.format) 

我使用寫的數據幀數據幀轉換爲字符串命令。我希望輸出是正確的對齊

f2 = open('2.txt','w') 
s=df_g.to_string(justify='right',index = False) 
f2.write(s) 
f2.close() 

在文本文件中並非所有的列都是右對齊的。 第1列包含一個整數,它按預期進行了右對齊 第5列包含一個2位小數的浮點數,它與預期的右對齊 第2,3和4列是字符串(我使用下面的命令使它們成爲數據框中的字符串

df_g['Date1']=df_g['Date1'].map('{:12s}'.format) 

1,26/04/2015,09:19:07,更文本,-1600.00,

(我提出的逗號只是爲了演示,其中字段結束,並開始

所以,我仍然無法找到dataframe.to_string輸出格式化st戒指。最有趣的是,「地圖格式」實際上改變了字符串的長度(和間距),但是「對齊='正確'」並不適用於它們。

有什麼建議嗎?

+0

不'df.to_string(justify ='right')'做你想做的事?您必須使用文件編寫器來編寫行 – EdChum

+0

['to_string'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_string.html#pandas.DataFrame.to_string )接受一個StringIO緩衝區,所以你可以使用它來編寫你的空格分隔文件 – EdChum

+0

具有諷刺意味的是,使用df.string可以很好地處理整數和浮點數,但是由於某些原因它不能正確地對齊字符串。 –

回答

1

我想這可能會給你你想要的。首先填寫你建議的列條目。然後沿軸1總結:

s = df_string.sum(axis=1) 

這與在表示在原DF一行中每個條目的字符串的一個系列。然後,只需添加一個換行符到每個元素之和再次:

s = (s + '\n').sum() 

然後只寫你想

open('t.txt', 'w').write(s) 

這裏是一個愚蠢簡潔的單行例子文件:

df = pd.DataFrame({'A': [1.2, 2.34], 'B': ['foo', 'bar', ]}) 
print (df.applymap(lambda x: '{:>20s}'.format(str(x))).sum(axis=1) + '\n').sum() 

      1.2     foo 
      2.34     bar