2013-05-10 19 views
8

Pandaların read_fwf olduğunu görüyorum, ama DataFrame.to_fwf gibi bir şey var mı? Alan genişliği, sayısal hassasiyet ve dize doğrulaması için destek arıyorum. Görünüşe göre DataFrame.to_csv bunu yapmıyor. numpy.savetxt yapar ama yapmam istemem: sadece yanlış görünüyorPython Pandalar, DataFrame'i sabit genişlikli dosyaya yaz (to_fwf?)

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

. Fikirleriniz çok takdir ediliyor.

+2

'to_string' yöntemine bakmak her satır için biçimlendirme sağlar. – zach

+0

Bu yakın görünüyor. İki şamandıra veya dize sütununun farklı biçimleri varsa, her sütun için bir biçimlendirme işlevi vermem gerekiyor gibi görünüyor. Bu hile yapar, sadece biraz tuhaf görünür. Bir şey kaçırdığımı umuyordum. Teşekkürler! – jkmacc

+1

pandalar * df.to_csv *, virgülü başka herhangi bir şeye boşluk veya boş bir dize olarak değiştiren bir * sep = "" * parametresine sahiptir. Yöntemin biçimlendiricisi ile bağlantılı olarak bunu yapmalıdır. – Joop

cevap

2

Bu sorun için bir geçici çözüm bulduğumdan eminim ama meraklı herkes için ... DF'yi bir listeye yazarsanız, bir dosyaya 'biçim olarak vererek' bir dosyaya yazabilirsiniz. string'.format (liste endeksleri) örn:

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 

Sadece doğru formatta :)

Hope yardımcı olan her endeksi maç emin olun! cevap aboves soru bana yardımcı

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 
5

pandalar birisiyle implements bu kadar, tabulate paketini kullanabilirsiniz. En iyisi değil, ama to_fwf varsa kadar bu tüm çizgi biçimini ayarlayabilirsiniz her sütun için özel biçimi için ... benim için

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

veya

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

olan formatters parametresi varsa, bu benim için zarif bir şekilde çalıştı. Dize-boşluk biçimlendirmesi ile elle uğraşmak çok daha aklı başında. – DeusXMachina

1

hile olacaktır. fmt param istediğini yapabileceğini eğer öyleyse bakın

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)