Я действительно новичок в Python и испытываю трудности с этой проблемой. Я должен взять следующую информацию из фрейма данных и указать его среднее значение (ответ должен дать одно число)

Вот столбец из фрейма данных:

   Country
China                  93.0
United States         286.0
Japan                 149.0
United Kingdom        124.0
Russian Federation    214.0
Canada                296.0
Germany               165.0
India                  26.0
France                166.0
South Korea           221.0
Italy                 109.0
Spain                 106.0
Iran                  119.0
Australia             231.0
Brazil                 59.0
Name: Energy Supply per Capita, dtype: float64

Теперь с помощью следующего:

Per_capita = Top15.loc[:,['Energy Supply per Capita']].mean()
Per_capita.iloc[0]

Я получил:

157.59999999999999

Поэтому я попытался использовать функцию round:

Per_capita = Per_capita.round(decimals = 1)

Я все еще получаю тот же результат, если у меня есть десятичные знаки. Он изменяется только тогда, когда я устанавливаю десятичные дроби на 0, и это дает 158, что, я полагаю, не является ответом, который они ищут.

Если я не использую функцию iloc, я получаю хороший десятичный ответ, хотя

Energy Supply per Capita    157.6

Я хочу получить 2 десятичных ответа на выше

1
Aasheet Kumar 11 Янв 2017 в 07:47

3 ответа

Лучший ответ

Это не проблема округления; это проблема отображения. Число 157,6 точно не представляется в арифметике двойной точности, его типичное число двойной точности немного меньше 157,6. Плавания Python и NumPy различаются в способах решения этой проблемы при отображении чисел в консоли. Пример:

x = 157.6
df = pd.DataFrame({'a': [x]})
y = df.iloc[0,0]

Теперь, если вы напечатаете x в консоли, вы получите 157.6, но если вы напечатаете y, вы получите 157.59999999999999. Тем не менее, x == y верно. В чем дело?

Разные типы, вот и все: x - это число с плавающей точкой Python, y - это число с плавающей точкой NumPy, поскольку оно пришло из фрейма данных (pandas использует NumPy под капотом). Отсюда и косметические различия во внешности. Числа одинаковые, округлять нечего.

Как избежать уродливых девяток: используйте print(y) или, в вашем примере, print(Per_capita.iloc[0]). Функция печати будет хорошо представлять поплавки, будь то поплавки NumPy или поплавки Python.

2
user6655984user6655984 11 Янв 2017 в 05:42

Это может быть связано с данными 157.59999999999999

Возьмите пример следующим образом:

Б = +157,59999999999999

Выведите np.round (b, десятичные = 0)

Выведите np.round (b, десятичные = 1)

Выведите np.round (b, десятичные = 4)

158,0

157,6

157,6

Если изменить значение b:

Б = +157,5932321231341231

Выведите np.round (b, десятичные = 0)

Выведите np.round (b, десятичные = 1)

Выведите np.round (b, десятичные = 2)

158,0

157,6

157,59

Это время работает, так что это может зависеть от данных .999999

Для данных результат для десятичных = 2,3,4, все результаты одинаковы.

0
EMiYiTu 11 Янв 2017 в 05:59

Я считаю, что вы решаете задание Coursera. Просто используйте следующий код, если ответ должен быть числом без десятичных знаков:

Per_capita = int(Top15.mean())

Если вам нужен ответ для 157.6, используйте:

Per_capita = Top15.mean()
0
Mahesh 11 Янв 2017 в 05:32