2013-08-23 42 views
15

Như Python người mới Gần đây tôi phát hiện ra rằng với Py 2.7 Tôi có thể làm gì đó như:Py Pandas .format (dataframe)

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

mà sẽ cung cấp kết quả đầu ra:

123,456,789.00 

Tôi bây giờ tìm cách để có một kết quả tương tự cho một dand df vì vậy mã của tôi là như:

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) 

Trong trường hợp này tôi có lỗi:

Unknown format code 'f' for object of type 'str' 

Bất kỳ đề xuất nào để thực hiện điều gì đó như '{:20,.2f}'.format(df)?

Bây giờ ý tưởng của tôi là lập chỉ mục dataframe (đó là một nhỏ), sau đó định dạng từng float riêng bên trong nó, có thể gán astype (str), và xây dựng lại DF ... nhưng trông rất xấu xí: - (và tôi thậm chí không chắc nó sẽ hoạt động ..

Bạn nghĩ gì? Tôi bị kẹt ... và muốn có định dạng tốt hơn cho các khung dữ liệu của tôi khi chúng được chuyển thành lưới báo cáo.

Trả lời

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) 

sản lượng (đầu ra ngẫu nhiên tương tự như)

     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 

Các docstring cho pd.set_option hoặc pd.describe_option giải thích:

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

Cảm ơn bạn rất nhiều cho việc này! Trông hoàn hảo :-) cho khung dữ liệu. Đó là một bước tiến tuyệt vời .. bây giờ tôi đang phải đối mặt với chủ đề tiếp theo đó là về reportlab .. ha ha .. funny .. khi DF được chuyển đổi sang lưới sau đó tôi sẽ rõ ràng mất định dạng .. uffff .... nhưng Tôi sẽ xử lý một cách nào đó .. Trợ giúp tuyệt vời từ bạn !! Cảm ơn bạn rất nhiều !! –

+3

Cũng có thể thực hiện điều này dưới dạng 'pd.options.display.float_format = '{: 20, .2f}'. Format' hoặc' pd.set_option ('float_format', '{: 20, .2f}'. Format) ' :) http://pandas.pydata.org/pandas-docs/stable/basics.html#working-with-package-options –

+0

@AndyHayden: Cảm ơn mẹo! – unutbu

Các vấn đề liên quan