#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, дополнительные тысячные цифры увеличивают округление.