2017-06-28 4 views
0

Ich schreibe eine Zeichenfolge aus einem Datenrahmen. Ich möchte, dass es formatters respektiert, aber ich möchte keine Header in der Zeichenfolge. Wie kann ich beides bekommen: keine Kopfzeile, ja Formatierung?Formatierer verwenden, um eine Zeichenfolge aus einem Datenrahmen zu erstellen

import pandas 
df = pandas.DataFrame({'c': 1, 'd': 2.3}, index=[0],) 
formats = {'c': '{: 10d}', 'd': '{: 2.5f}'} 
formatters = {k: v.format for k, v in formats.items()} 
df.to_string(formatters=formatters, index=False, header=True) 

u'c  d\n  1 2.30000' 


df.to_string(formatters=formatters, index=False, header=False) 

'1 2.30000' 

Ich glaube, das erwartete Ergebnis ist so etwas wie dies ?:

'   1 2.30000' 
+0

Header Bedeutung? Sie wollen nicht, dass die '1' zusammen gedruckt wird? – void

+0

Es scheint nur die führenden leeren Zeichen zu sein, die entfernt werden. Wenn das Füllen mit z.B. '0' funktioniert, und auch der korrekte Bruchteil bleibt erhalten. Ich habe es auch mit mehreren Zeilen versucht und es ist nur die erste Zeile betroffen. – JohanL

Antwort

1

[Disclaimer: Ich habe noch nie gehört DataFrame]

Dies sieht aus wie ein Fehler in DataFrame mir. Versuchen Sie, den Entwicklern einen Fehler mitzuteilen.

Als Abhilfe können, sieht es wie Sie nur die erste Zeile aus der Zeichenfolge schneiden könnte:

raw = df.to_string(formatters=formatters, index=False, header=True) 
without_headers = '\n'.join(foo.splitlines()[1:]) 
+0

Uh, nein? Mein Code entfernt die erste Zeile, nicht das erste Zeichen. – robru

0

Sie ein zweites DataFrame mit allem, was alles richtig

df2 = pd.DataFrame() 
for col_name, col in df.iteritems(): 
    df2[col_name] = col.apply(lambda x: formats[col_name].format(x)) 

und dann verketten formatiert machen könnte

zusammen

print ('' verbinden (i 'join (.'. [1:]) für i in df2.itertuples()))

'   1 2.30000' 
Verwandte Themen