2013-08-23 23 views
15

Als Python-Neuling ich kürzlich entdeckt, dass mit Py 2.7 Ich kann so etwas tun:Py Pandas .format (Datenrahmen)

print '{:20,.2f}'.format(123456789) 

, die die resultierende Ausgabe geben wird:

123,456,789.00 

Ich bin jetzt ein ähnliches Ergebnis zu haben, für eine Pandas df suchen so mein Code wie war:

import pandas as pd 
import random 
data = [[random.random()*10000 for i in range(1,4)] for j in range (1,8)] 
df = pd.DataFrame (data) 
print '{:20,.2f}'.format(df) 

In diesem Fall habe ich den Fehler:

Irgendwelche Vorschläge, um etwas wie '{:20,.2f}'.format(df) durchzuführen?

Wie jetzt ist meine Idee, den Datenrahmen zu indexieren (es ist ein kleiner), dann formatiert jedes einzelne float darin, könnte astype (str) zugewiesen werden und den DF neu erstellen ... sieht aber so hässlich aus: - (und ich bin mir nicht einmal sicher, ob es funktioniert.

Was denkst du? Ich stecke fest ... und möchte ein besseres Format für meine Datenrahmen haben, wenn diese in Berichtslabels Grids umgewandelt werden.

Antwort

24
import pandas as pd 
import numpy as np 
data = np.random.random((8,3))*10000 
df = pd.DataFrame (data) 
pd.options.display.float_format = '{:20,.2f}'.format 
print(df) 

Ausbeuten (random Ausgabe ähnlich)

     0     1     2 
0    4,839.01    6,170.02    301.63 
1    4,411.23    8,374.36    7,336.41 
2    4,193.40    2,741.63    7,834.42 
3    3,888.27    3,441.57    9,288.64 
4    220.13    6,646.20    3,274.39 
5    3,885.71    9,942.91    2,265.95 
6    3,448.75    3,900.28    6,053.93 

Das docstring für pd.set_option oder pd.describe_option erklärt:

display.float_format: [default: None] [currently: None] : callable 
     The callable should accept a floating point number and return 
     a string with the desired format of the number. This is used 
     in some places like SeriesFormatter. 
     See core.format.EngFormatter for an example. 
+0

Vielen Dank dafür! Sieht perfekt aus :-) für den Datenrahmen. Es ist ein großer Schritt nach vorne .. jetzt bin ich mit dem nächsten Thema konfrontiert, das über reportlab ist .. ha ha .. lustig .. wenn DF in Raster konvertiert wird dann werde ich anscheinend das Format verlieren .. uffff .... aber Ich werde in irgendeiner Weise behandeln .. Große Hilfe von dir !! Ich danke dir sehr !! –

+3

Kann dies auch tun als 'pd.options.display.float_format = '{: 20, .2f}'. Format' oder' pd.set_option ('float_format', '{: 20, .2f}'. Format) ' :) http://pandas.pydata.org/pandas-docs/stable/basics.html#working-with-package-options –

+0

@AndyHayden: Danke für den Tipp! – unutbu