2013-05-10 60 views
8

我看到Pandas有read_fwf,但是它有類似於DataFrame.to_fwf的東西嗎?我正在尋找對字段寬度,數字精度和字符串對齊的支持。看來DataFrame.to_csv不這樣做。 numpy.savetxt呢,但我不想這樣做:Python Pandas,將DataFrame寫入固定寬度文件(to_fwf?)

numpy.savetxt('myfile.txt', mydataframe.to_records(), fmt='some format') 

這似乎是錯誤的。你的想法非常感謝。

+2

看看了'to_string'方法,以便看看你是否可以做你想做的。 – zach 2013-05-13 01:02:58

+0

這看起來很接近。看起來,如果任何兩個浮點或字符串列具有不同的格式,我必須爲每列提供一個格式化函數。它會做的伎倆,它看起來有點笨拙。我希望我錯過了一些東西。謝謝! – jkmacc 2013-05-13 18:35:04

+1

pandas * df.to_csv *有一個* sep =「」*參數,用於將逗號更改爲本例中的任何空格或空字符串。與該方法的格式化程序一起應該這樣做。 – Joop 2013-06-14 10:52:20

回答

2

我相信你找到了解決這個問題的方法,但是對於好奇的其他人來說...... 如果你把DF寫入一個列表,你可以把它寫成一個文件, string'.format(列表索引) 如:

df=df.fillna('') 
outF = 'output.txt'  
dbOut = open(temp, 'w') 
v = df.values.T.tolist()   
for i in range(0,dfRows):  
    dbOut.write((\ 
    '{:7.2f}{:>6.2f}{:>2.0f}{:>4.0f}{:>5.0f}{:6.2f}{:6.2f}{:6.2f}{:6.1f {:>15}{:>60}'\ 
    .format(v[0][i],v[1][i],v[2][i],v[3][i],v[4][i],v[5][i],v[6][i],v[7][i],v[8][i],\ 
    v[9][i],v[10][i]))) 
    dbOut.write("\n") 
dbOut.close 

只要確保各項指標與正確的格式:)

希望幫助匹配!

5

直到有人implements這熊貓,你可以使用tabulate包:

import pandas as pd 
from tabulate import tabulate 

def to_fwf(df, fname): 
    content = tabulate(df.values.tolist(), list(df.columns), tablefmt="plain") 
    open(fname, "w").write(content) 

pd.DataFrame.to_fwf = to_fwf 
+0

這對我來說很合適。非常理智的是,用手動方式處理字符串空間格式。 – DeusXMachina 2017-02-03 15:28:16

5

Python, Pandas : write content of DataFrame into text File

aboves回答問題幫助了我。這是不是最好的,但直到to_fwf存在,這將這樣的伎倆我...

np.savetxt(r'c:\data\np.txt', df.values, fmt='%d') 

np.savetxt(r'c:\data\np.txt', df.values, fmt='%10.5f') 
+0

IMO比'tabulate'更好,因爲numpy包含在熊貓中,所以不需要額外的庫 – maxymoo 2017-03-09 03:55:48

1

爲可以爲整條生產線設置格式每一列自定義格式。 FMT PARAM提供了格式爲每行

with open('output.dat') as ofile: 
    fmt = '%.0f %02.0f %4.1f %3.0f %4.0f %4.1f %4.0f %4.1f %4.0f' 
    np.savetxt(ofile, df.values, fmt=fmt)