Форматирование Pandas с плавающей запятой

#python #pandas #floating-point

#python #pandas #форматирование с плавающей запятой

Вопрос:

Я новичок в Python / Pandas и не знаю, как представить мой фрейм данных. Я понимаю, что данные, возможно, не нужно изменять, а скорее то, как они отображаются.

У меня есть фрейм данных следующим образом:

                          min           max          mean
marketCap(EUR)  6.110331e 10  2.837429e 11  1.275993e 11
price(EUR)      3.679996e 03  1.694395e 04  7.538254e 03
generatedCoins  1.000000e 03  2.437500e 03  1.921524e 03
paymentCount    2.386370e 05  8.086800e 05  4.019127e 05
min     float64
max     float64
mean    float64
dtype: object
  

но хотелось бы, чтобы это отображалось следующим образом:

                    min       max     average
marketcap(EUR)    61.10    283.74     127.59
price(EUR)      3679.99  16943.95    7538.25
generatedCoins  1000.00   2437.50    1921.52
paymentCount  238637.00 808680.00  401912.66
  

Что мне нужно изменить, чтобы отформатировать вывод по желанию?

Это код, который я использовал для фрейма данных:

 ResultDataFrameEUR = pd.DataFrame(0, index=['marketCap(EUR)','price(EUR)','generatedCoins','paymentCount'], columns = ['min','max','mean'])  #Create new DataFrame for Output and fill it with 0
ResultDataFrameEUR.loc['marketCap(EUR)'] = BtcDataFrameEUR['marketCap(EUR)'].agg(['min', 'max', 'mean'])
ResultDataFrameEUR.loc['price(EUR)'] = BtcDataFrameEUR['price(EUR)'].agg(['min', 'max', 'mean'])
ResultDataFrameEUR.loc['generatedCoins'] = BtcDataFrameEUR['generatedCoins'].agg(['min', 'max', 'mean'])
ResultDataFrameEUR.loc['paymentCount'] = BtcDataFrameEUR['paymentCount'].agg(['min', 'max', 'mean'])
  

Ответ №1:

Измените параметр отображения для плавающих значений:

 import pandas as pd

pd.options.display.float_format = '{:.2f}'.format

print(df)
#                          min             max            mean
#marketCap(EUR) 61103310000.00 283742900000.00 127599300000.00
#price(EUR)            3680.00        16943.95         7538.25
#generatedCoins        1000.00         2437.50         1921.52
#paymentCount        238637.00       808680.00       401912.70
  

Похоже, вы также хотите отобразить первую строку в миллиардах, поэтому сделайте:

 df.loc['marketCap(EUR)'] = df.loc['marketCap(EUR)']/10**9

#                     min       max      mean
#marketCap(EUR)     61.10    283.74    127.60
#price(EUR)       3680.00  16943.95   7538.25
#generatedCoins   1000.00   2437.50   1921.52
#paymentCount   238637.00 808680.00 401912.70
  

Или, возможно, не изменять данные и добавлять , для разделения каждых 3 порядков magintude:

 pd.options.display.float_format = '{:,.2f}'.format

#                             min                max               mean
#marketCap(EUR) 61,103,310,000.00 283,742,900,000.00 127,599,300,000.00
#price(EUR)              3,680.00          16,943.95           7,538.25
#generatedCoins          1,000.00           2,437.50           1,921.52
#paymentCount          238,637.00         808,680.00         401,912.70
  

Комментарии:

1. невероятно! Спасибо @Alollz. В двух случаях значение с плавающей точкой было округлено до «3680.00» вместо «3679.99» и «127.60» вместо «127.59», почему это так?

2. @forceorange поскольку они действительно равны 3679,996, дополнительные тысячные цифры увеличивают округление.