2013-05-10 222 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)